From 6f6cb9c6704cf36b8972e233ee1d4b25bd120fb1 Mon Sep 17 00:00:00 2001 From: Junior Deogracias Date: Thu, 12 Nov 2026 22:38:52 +0100 Subject: [PATCH 01/10] Importers: ST's STM32G4 SVD and multi-group analog pins - svd2regs.py: --strip-prefixes (TIM2_CR1 in TIM2 named CR1, as ST's STM32G4 file prefixes them), --rename, and --drop leaving the peripherals derived from the dropped one its registers (the G4's FDCAN listed at its message RAM's address). - stm32pins.py: a pin whose ADCs number it differently lists each group (the G4's PB0: "ADC1_IN15, ADC3_IN12"); esk_rf_analog_pin reads them. - dma_requests: a DMAMUX's request inputs by number (0 to 255). --- core/mcu/rf.c | 32 +++++++++---- schemas/mcu.schema.json | 4 +- tools/importers/stm32pins.py | 10 ++-- tools/importers/svd2regs.py | 90 +++++++++++++++++++++++++++++++++++- tools/test_stm32pins.py | 5 +- tools/test_svd2regs.py | 55 ++++++++++++++++++++++ 6 files changed, 179 insertions(+), 17 deletions(-) diff --git a/core/mcu/rf.c b/core/mcu/rf.c index 09688157d..2ebf47b9d 100644 --- a/core/mcu/rf.c +++ b/core/mcu/rf.c @@ -490,7 +490,9 @@ es_status esk_rf_dma_requests(struct esk_mach *m, const esk_json *map, char *why for (k = 0; k < esk_json_len(st); k++) { const esk_json *ch = esk_json_at(st, k); long chn = ch && ch->key ? strtol(ch->key, NULL, 10) : -1; - if (sn < 0 || sn > 15 || chn < 0 || chn > 15) { + /* a multiplexer's request inputs are numbered past 15 (an + * STM32G4's DMAMUX: 0 to 115) */ + if (sn < 0 || sn > 15 || chn < 0 || chn > (strcmp(cn, "DMAMUX") ? 15 : 255)) { snprintf(why, cap, "dma_requests: %s has a bad stream or channel", cn); return ES_ESCHEMA; } @@ -544,15 +546,27 @@ es_status esk_rf_analog(struct esk_mach *m, const esk_json *an, char *why, size_ int esk_rf_analog_pin(const struct esk_rf *rf, int unit, int ch) { int i; + /* each pin's entry names one group of channels (ADC123_IN0), or several + * where its ADCs number it differently (an STM32G4's PB0: "ADC1_IN15, + * ADC3_IN12") */ for (i = 0; rf && i < rf->nan; i++) { - const char *s = rf->an_sig[i], *in; - int k, has = 0; - if (strncmp(s, "ADC", 3) || !(in = strstr(s, "_IN")) || strtol(in + 3, NULL, 10) != ch) - continue; - for (k = 3; s + k < in; k++) - has |= s[k] - '0' == unit; - if (has) - return rf->an_at[i]; + const char *s = rf->an_sig[i]; + while (s && *s) { + const char *in; + int k, has = 0; + while (*s == ' ' || *s == ',') + s++; + if (!strncmp(s, "ADC", 3) && (in = strstr(s, "_IN")) != 0 && strtol(in + 3, NULL, 10) == ch) { + const char *end = strchr(s, ','); + if (!end || in < end) { + for (k = 3; s + k < in; k++) + has |= s[k] - '0' == unit; + if (has) + return rf->an_at[i]; + } + } + s = strchr(s, ','); + } } return -1; } diff --git a/schemas/mcu.schema.json b/schemas/mcu.schema.json index ca9562da9..291688fb0 100644 --- a/schemas/mcu.schema.json +++ b/schemas/mcu.schema.json @@ -83,14 +83,14 @@ }, "dma_requests": { "type": "object", - "description": "A DMA controller's request mapping (an STM32's DMA1 and DMA2, RM0390 tables 28 and 29): controller -> stream -> the channel CHSEL selects -> the peripheral requests on it (USART2_RX, TIM1_UP, ADC1)", + "description": "A DMA controller's request mapping (an STM32's DMA1 and DMA2, RM0390 tables 28 and 29): controller -> stream -> the channel CHSEL selects -> the peripheral requests on it (USART2_RX, TIM1_UP, ADC1); an STM32G4's request multiplexer as controller DMAMUX, stream 0, its request inputs by number (RM0440 table 91)", "propertyNames": {"pattern": "^[A-Z][A-Z0-9_]*$"}, "additionalProperties": { "type": "object", "propertyNames": {"pattern": "^[0-9]{1,2}$"}, "additionalProperties": { "type": "object", - "propertyNames": {"pattern": "^[0-9]{1,2}$"}, + "propertyNames": {"pattern": "^[0-9]{1,3}$"}, "additionalProperties": {"type": "array", "minItems": 1, "items": {"type": "string", "pattern": "^[A-Z][A-Z0-9_]*$"}} } } diff --git a/tools/importers/stm32pins.py b/tools/importers/stm32pins.py index 224a0e413..a76a3a241 100644 --- a/tools/importers/stm32pins.py +++ b/tools/importers/stm32pins.py @@ -13,7 +13,8 @@ (PA0, from "PA0-WKUP"), the rest of its name becoming the pin's doc; power, reset and boot pins keep their names (VCAP_1, NRST, BOOT0). The analog map names each port pin's ADC inputs as the reference manual does, the ADCs -sharing a channel joined (ADC123_IN0). The alternate-function map, from +sharing a channel joined (ADC123_IN0), and the groups listed when its ADCs +number it differently ("ADC1_IN15, ADC3_IN12"). The alternate-function map, from the family's GPIO modes file (GPIO-_Modes.xml), gives each of the package's port pins the signals of each AF number (RM0390 7.3.2's table), AF15 being EVENTOUT on every pin; the debug port's signals lose their SYS_ @@ -78,8 +79,11 @@ def analog_of(pins: list) -> dict: if a: chans.setdefault(int(a.group(2)), []).append(a.group(1)) if chans: - ch = min(chans) - out[m.group(1)] = f"ADC{''.join(sorted(chans[ch]))}_IN{ch}" + # the ADCs sharing a channel number joined (ADC123_IN0); a pin + # whose ADCs number it differently lists each (an STM32G4's + # PB0: "ADC1_IN15, ADC3_IN12") + out[m.group(1)] = ", ".join(f"ADC{''.join(sorted(chans[ch]))}_IN{ch}" + for ch in sorted(chans, key=lambda c: (min(chans[c]), c))) return dict(sorted(out.items(), key=lambda kv: (kv[0][:2], int(kv[0][2:])))) diff --git a/tools/importers/svd2regs.py b/tools/importers/svd2regs.py index 1585941c2..93b2ce325 100644 --- a/tools/importers/svd2regs.py +++ b/tools/importers/svd2regs.py @@ -31,7 +31,11 @@ (RCC PLLCFGR's PLLM0..PLLM5) --drop PERIPH=WHY (repeatable) a peripheral the SVD lists that is another's registers at the same address - (Espressif's RNG, APB_CTRL's RND_DATA) + (Espressif's RNG, APB_CTRL's RND_DATA), or + at an address where no registers are (ST's + STM32G4 FDCAN, its message RAM's address): + the peripherals derived from it keep its + registers --fill PERIPH=FROM:WHY (repeatable) the registers of FROM at offsets PERIPH lacks, where the two share one layout and the SVD lists only part of PERIPH's @@ -41,6 +45,14 @@ the SVD leaves out, as WORDS 32-bit registers NAME0, NAME1, ... (the ESP32-C3's RMT RAM); recorded likewise + --strip-prefixes register names that repeat their + peripheral's (TIM2_CR1 in TIM2, RCC_CR in + RCC, DAC_CR in DAC1, as ST's STM32G4 file + names them) lose that prefix, the name the + reference manual gives them; recorded + --rename PERIPH.REG=NEW (repeatable) a register renamed as the + reference manual names it (TIM15's + CCMR1_Output: CCMR1); recorded --resolve-overlaps fields that share bits, which some SVDs list as alternative views of one register (Espressif's: a whole-register STATUS @@ -171,6 +183,8 @@ def convert(svd: Path, ident: str) -> dict: periphs, irqs = [], {} for p in root.iter("peripheral"): entry = {"name": p.findtext("name"), "base": "0x%08X" % num(p.findtext("baseAddress"))} + if p.findtext("groupName"): + entry["_group"] = p.findtext("groupName") names = [] for i in p.findall("interrupt"): irqs[i.findtext("name")] = num(i.findtext("value")) @@ -375,14 +389,77 @@ def apply_drops(doc: dict, specs: list[str]) -> None: done = [] for spec in specs: name, _, why = spec.partition("=") - if not any(p["name"] == name for p in doc["peripherals"]): + gone = next((p for p in doc["peripherals"] if p["name"] == name), None) + if gone is None: sys.exit(f"svd2regs: --drop {spec}: no peripheral {name}") + heir = None + for p in doc["peripherals"]: + if p.get("derived_from") != name: + continue + if heir is None and "registers" in gone: + # the first derived from it takes its registers, the others + # derive from that one + p.pop("derived_from") + p["registers"] = [dict(r) for r in gone["registers"]] + heir = p["name"] + elif heir is not None: + p["derived_from"] = heir doc["peripherals"] = [p for p in doc["peripherals"] if p["name"] != name] done.append(f"{name} ({why})" if why else name) if done: doc["source"] += "; peripherals left out: " + "; ".join(done) +def strip_prefixes(doc: dict) -> None: + """register names PREFIX_NAME in a peripheral whose name, name without + its number, or group is PREFIX become NAME (unless NAME is taken); a + field named after the whole register is renamed with it""" + done = [] + for p in doc["peripherals"]: + regs = p.get("registers") + if not regs: + continue + prefixes = {p["name"], re.sub(r"\d+$", "", p["name"])} + if p.get("_group"): + prefixes.add(p["_group"]) + taken = {r["name"] for r in regs} + n = 0 + for r in regs: + for pre in sorted(prefixes, key=len, reverse=True): + if r["name"].startswith(pre + "_") and len(r["name"]) > len(pre) + 1: + new = r["name"][len(pre) + 1:] + if new in taken: + break + for f in r.get("fields", []): + if f[0] == r["name"]: + f[0] = new + taken.discard(r["name"]) + taken.add(new) + r["name"] = new + n += 1 + break + if n: + done.append(f"{p['name']} ({n})") + if done: + doc["source"] += "; register names' peripheral prefixes taken off: " + ", ".join(done) + + +def apply_renames(doc: dict, specs: list[str]) -> None: + """registers PERIPH.REG=NEW renamed, recorded in source""" + done = [] + for spec in specs: + target, _, new = spec.partition("=") + reg = find_reg(doc, target, "--rename") + pname = target.partition(".")[0] + p = next(q for q in doc["peripherals"] if q["name"] == pname) + if not new or any(r["name"] == new for r in p["registers"]): + raise SystemExit(f"--rename {spec}: no new name, or {pname} already has {new}") + reg["name"] = new + done.append(spec) + if done: + doc["source"] += "; registers renamed as the reference manual names them: " + ", ".join(done) + + def apply_fills(doc: dict, specs: list[str]) -> None: """to each PERIPH of `specs` (PERIPH=FROM:WHY), FROM's registers at the offsets it lacks, recorded in source""" @@ -450,11 +527,18 @@ def main(argv: Optional[list[str]] = None) -> int: help="one-bit fields NAME0..NAMEn joined into NAME") ap.add_argument("--reserve", action="append", default=[], metavar="PERIPH.REG.NAME", help="a field whose bits the reference manual reserves, taken out") + ap.add_argument("--strip-prefixes", action="store_true", + help="register names that repeat their peripheral's lose that prefix") + ap.add_argument("--rename", action="append", default=[], metavar="PERIPH.REG=NEW", + help="a register renamed as the reference manual names it") ap.add_argument("--resolve-overlaps", action="store_true", help="fields containing another, or repeating its bits, taken out") args = ap.parse_args(argv) doc = convert(args.svd, args.id or (args.svd.stem.lower() + "/registers")) apply_drops(doc, args.drop) + if args.strip_prefixes: + strip_prefixes(doc) + apply_renames(doc, args.rename) apply_fills(doc, args.fill) apply_memories(doc, args.memory) apply_merges(doc, args.merge) @@ -465,6 +549,8 @@ def main(argv: Optional[list[str]] = None) -> int: resolve_overlaps(doc) apply_resets(doc, args.reset) apply_interrupts(doc, args.interrupts) + for p in doc["peripherals"]: + p.pop("_group", None) args.output.write_text(json.dumps(doc, indent=1) + "\n", encoding="utf-8") nregs = sum(len(p.get("registers", [])) for p in doc["peripherals"]) print(f"{args.output}: {len(doc['peripherals'])} peripherals, {nregs} registers, {len(doc['interrupts'])} interrupts") diff --git a/tools/test_stm32pins.py b/tools/test_stm32pins.py index b9bbe11c2..1bc04e067 100644 --- a/tools/test_stm32pins.py +++ b/tools/test_stm32pins.py @@ -20,6 +20,7 @@ + """ @@ -36,7 +37,9 @@ def test_package_and_analog(self): self.assertEqual(pkg["pins"][0], {"number": 1, "signal": "VBAT"}) self.assertEqual(pkg["pins"][1], {"number": 2, "signal": "PA0", "doc": "PA0-WKUP"}) self.assertEqual(pkg["pins"][4], {"number": 5, "signal": "NRST"}) - self.assertEqual(stm32pins.analog_of(pins), {"PA0": "ADC123_IN0", "PC4": "ADC12_IN14"}) + # an STM32G4's PB0: its ADCs number it differently, both listed + self.assertEqual(stm32pins.analog_of(pins), + {"PA0": "ADC123_IN0", "PB0": "ADC1_IN15, ADC3_IN12", "PC4": "ADC12_IN14"}) def test_alternate(self): modes = """ diff --git a/tools/test_svd2regs.py b/tools/test_svd2regs.py index bc9145c98..cad24a911 100644 --- a/tools/test_svd2regs.py +++ b/tools/test_svd2regs.py @@ -182,5 +182,60 @@ def test_memory(self): svd2regs.apply_memories(doc, ["UART0.RAM=0x404:2:again"]) +PREFIXED = """ + + TOYG4 + 32 + + + TIM2TIM0x40000000 + + TIM2_CR10x0 + TIM2_SR0x10 + UIF01 + + + + DAC1DAC0x50000800 + + DAC_CR0x0 + OPAMP1_CSR0x4 + + + + FDCAN0x4000A400 + FDCAN_CREL0x00x32141218 + + FDCAN10x40006400 + FDCAN20x40006800 + + +""" + + +class Svd2RegsPrefixed(unittest.TestCase): + """ST's STM32G4 file: register names prefixed with their peripheral's, + and the FDCAN registers listed at the message RAM's address""" + + def test_strip_and_drop(self): + with tempfile.TemporaryDirectory() as tmp: + p = Path(tmp) / "toy.svd" + o = Path(tmp) / "out.json" + p.write_text(PREFIXED) + svd2regs.main([str(p), "-o", str(o), "--strip-prefixes", "--drop", "FDCAN=the message RAM's address"]) + doc = json.loads(o.read_text(encoding="utf-8")) + by = {q["name"]: q for q in doc["peripherals"]} + self.assertEqual([r["name"] for r in by["TIM2"]["registers"]], ["CR1", "SR"]) + # the group's prefix too; another peripheral's name is kept + self.assertEqual([r["name"] for r in by["DAC1"]["registers"]], ["CR", "OPAMP1_CSR"]) + # the first derived from the dropped one takes its registers + self.assertNotIn("FDCAN", by) + self.assertEqual(by["FDCAN1"]["registers"][0]["name"], "CREL") + self.assertEqual(by["FDCAN1"]["registers"][0]["reset"], "0x32141218") + self.assertEqual(by["FDCAN2"]["derived_from"], "FDCAN1") + self.assertIn("prefixes taken off", doc["source"]) + self.assertNotIn("_group", json.dumps(doc)) + + if __name__ == "__main__": unittest.main() From 5a972f9029672fb2a66c24dae0e6139a63f20e09 Mon Sep 17 00:00:00 2001 From: Junior Deogracias Date: Thu, 12 Nov 2026 22:38:53 +0100 Subject: [PATCH 02/10] Cortex-M: exception entry clears CONTROL.SPSEL ARMv7-M's ExceptionTaken sets CONTROL.SPSEL to 0: a handler entered from a thread on the process stack reads CONTROL[1] as 0, and EXC_RETURN sets it again. The core switched stacks but left the bit set, which STM32CubeG4's CORTEXM_ProcessStack found. --- core/mcu/cortexm/cortexm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/core/mcu/cortexm/cortexm.c b/core/mcu/cortexm/cortexm.c index 5a5599cac..05a2a0374 100644 --- a/core/mcu/cortexm/cortexm.c +++ b/core/mcu/cortexm/cortexm.c @@ -353,6 +353,7 @@ static void exc_taken(struct esk_cm_state *cs, int n, u32 lr) { cs->R[14] = lr; esk_cm_use_psp(cs, 0); + cs->control &= ~2u; /* ExceptionTaken: CONTROL.SPSEL = 0, the handler on the main stack */ cs->ipsr = (u32)n; cs->active[n] = 1; esk_cm_clr_pend(cs, n); From 0ec8b1b5fecc5e73f19acd294d3977e2f3f9f4af Mon Sep 17 00:00:00 2001 From: Junior Deogracias Date: Thu, 12 Nov 2026 22:38:53 +0100 Subject: [PATCH 03/10] The STM32G474RE: its description and the G4's models - st/stm32g474re: registers from ST's STM32G474.svd v3.0 with the corrections tools/importers/stm32g474_regs.sh applies, the LQFP64 pinout, analog inputs and alternate functions from ST's open pin data, the DMAMUX's request numbers, the memory map with both banks' option bytes, the engineering bytes, SRAMCAN and the USB packet memory. - New models: stm32g4-rcc, stm32g4-pwr, stm32g4-flash and stm32-usart-v2 (USARTs, UARTs and LPUART of the ISR/ICR layout). - Shared models taught the G4: GPIO's BRR, SYSCFG, EXTI's two banks, the programmable CRC, the IWDG's window and option bytes, the WWDG's 3-bit prescaler, DBGMCU's names, the timers' TISEL clocks and freeze bits. - A board can give its MCU's memory as shipped (mcu.memory), an MCU model the boot's choice (boot_pin, boot_system: BOOT0 on PB8). - test_stm32g4: 13 tests. --- NOTICE | 6 + .../st/stm32g474re/LICENSES/Apache-2.0.txt | 13 + catalog/mcus/st/stm32g474re/lqfp64.json | 281 + catalog/mcus/st/stm32g474re/mcu.json | 2258 + catalog/mcus/st/stm32g474re/registers.json | 45060 ++++++++++++++++ core/mcu/mach.h | 6 + core/mcu/mcu.c | 3 +- core/mcu/models.c | 4 + core/mcu/stm32/crc.c | 98 +- core/mcu/stm32/dbgmcu_f4.c | 5 + core/mcu/stm32/exti.c | 167 +- core/mcu/stm32/flash_g4.c | 731 + core/mcu/stm32/gpio_f4.c | 18 +- core/mcu/stm32/pwr_f4.c | 23 +- core/mcu/stm32/pwr_g4.c | 408 + core/mcu/stm32/rcc.c | 10 + core/mcu/stm32/rcc_g4.c | 919 + core/mcu/stm32/stm32.h | 59 +- core/mcu/stm32/syscfg_f4.c | 27 +- core/mcu/stm32/tim.c | 68 +- core/mcu/stm32/usart.c | 10 +- core/mcu/stm32/usart_v2.c | 980 + core/mcu/stm32/wdg.c | 73 +- core/project/loader.c | 48 +- core/util/diag_fr.c | 6 + docs/coverage.md | 93 + schemas/board.schema.json | 16 +- tests/unit/test_stm32g4.c | 782 + tools/importers/stm32g474_regs.sh | 42 + 29 files changed, 52142 insertions(+), 72 deletions(-) create mode 100644 catalog/mcus/st/stm32g474re/LICENSES/Apache-2.0.txt create mode 100644 catalog/mcus/st/stm32g474re/lqfp64.json create mode 100644 catalog/mcus/st/stm32g474re/mcu.json create mode 100644 catalog/mcus/st/stm32g474re/registers.json create mode 100644 core/mcu/stm32/flash_g4.c create mode 100644 core/mcu/stm32/pwr_g4.c create mode 100644 core/mcu/stm32/rcc_g4.c create mode 100644 core/mcu/stm32/usart_v2.c create mode 100644 tests/unit/test_stm32g4.c create mode 100755 tools/importers/stm32g474_regs.sh diff --git a/NOTICE b/NOTICE index ab4754780..ae5fd6158 100644 --- a/NOTICE +++ b/NOTICE @@ -88,6 +88,12 @@ carries its own licence beside it: 2.0), Copyright (c) 2024 STMicroelectronics; Apache-2.0 (catalog/mcus/st/stm32f446re/LICENSES/) + catalog/mcus/st/stm32g474re/registers.json + converted from STMicroelectronics' + STM32G474.svd (version 3.0, STM32G4 SVD + pack), Copyright (c) 2024 STMicroelectronics; + Apache-2.0 + (catalog/mcus/st/stm32g474re/LICENSES/) catalog/mcus/nordic/nrf52840/registers.json converted from Nordic Semiconductor's nrf52840.svd (nrfx 3.4.0), Copyright (c) diff --git a/catalog/mcus/st/stm32g474re/LICENSES/Apache-2.0.txt b/catalog/mcus/st/stm32g474re/LICENSES/Apache-2.0.txt new file mode 100644 index 000000000..439f2cf82 --- /dev/null +++ b/catalog/mcus/st/stm32g474re/LICENSES/Apache-2.0.txt @@ -0,0 +1,13 @@ +Copyright (c) 2026 Microchip Technology Inc. + +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. \ No newline at end of file diff --git a/catalog/mcus/st/stm32g474re/lqfp64.json b/catalog/mcus/st/stm32g474re/lqfp64.json new file mode 100644 index 000000000..c4cf33511 --- /dev/null +++ b/catalog/mcus/st/stm32g474re/lqfp64.json @@ -0,0 +1,281 @@ +{ + "schema_version": 1, + "kind": "package", + "id": "st/stm32g474re/lqfp64", + "name": "LQFP64", + "description": "LQFP64 package of the STM32G474R(B-C-E)Tx, its pinout from ST's open pin data; pin 7 is NRST (PG10-NRST) and PB8 doubles as BOOT0.", + "pins": [ + { + "number": 1, + "signal": "VBAT" + }, + { + "number": 2, + "signal": "PC13" + }, + { + "number": 3, + "signal": "PC14", + "doc": "PC14-OSC32_IN" + }, + { + "number": 4, + "signal": "PC15", + "doc": "PC15-OSC32_OUT" + }, + { + "number": 5, + "signal": "PF0", + "doc": "PF0-OSC_IN" + }, + { + "number": 6, + "signal": "PF1", + "doc": "PF1-OSC_OUT" + }, + { + "number": 7, + "signal": "NRST", + "doc": "PG10-NRST: the reset pin while the option bytes' NRST_MODE is 11 (bidirectional, the factory setting); PG10 is not modelled as a GPIO" + }, + { + "number": 8, + "signal": "PC0" + }, + { + "number": 9, + "signal": "PC1" + }, + { + "number": 10, + "signal": "PC2" + }, + { + "number": 11, + "signal": "PC3" + }, + { + "number": 12, + "signal": "PA0" + }, + { + "number": 13, + "signal": "PA1" + }, + { + "number": 14, + "signal": "PA2" + }, + { + "number": 15, + "signal": "VSS" + }, + { + "number": 16, + "signal": "VDD" + }, + { + "number": 17, + "signal": "PA3" + }, + { + "number": 18, + "signal": "PA4" + }, + { + "number": 19, + "signal": "PA5" + }, + { + "number": 20, + "signal": "PA6" + }, + { + "number": 21, + "signal": "PA7" + }, + { + "number": 22, + "signal": "PC4" + }, + { + "number": 23, + "signal": "PC5" + }, + { + "number": 24, + "signal": "PB0" + }, + { + "number": 25, + "signal": "PB1" + }, + { + "number": 26, + "signal": "PB2" + }, + { + "number": 27, + "signal": "VSSA" + }, + { + "number": 28, + "signal": "VREFP", + "doc": "VREF+" + }, + { + "number": 29, + "signal": "VDDA" + }, + { + "number": 30, + "signal": "PB10" + }, + { + "number": 31, + "signal": "VSS" + }, + { + "number": 32, + "signal": "VDD" + }, + { + "number": 33, + "signal": "PB11" + }, + { + "number": 34, + "signal": "PB12" + }, + { + "number": 35, + "signal": "PB13" + }, + { + "number": 36, + "signal": "PB14" + }, + { + "number": 37, + "signal": "PB15" + }, + { + "number": 38, + "signal": "PC6" + }, + { + "number": 39, + "signal": "PC7" + }, + { + "number": 40, + "signal": "PC8" + }, + { + "number": 41, + "signal": "PC9" + }, + { + "number": 42, + "signal": "PA8" + }, + { + "number": 43, + "signal": "PA9" + }, + { + "number": 44, + "signal": "PA10" + }, + { + "number": 45, + "signal": "PA11" + }, + { + "number": 46, + "signal": "PA12" + }, + { + "number": 47, + "signal": "VSS" + }, + { + "number": 48, + "signal": "VDD" + }, + { + "number": 49, + "signal": "PA13" + }, + { + "number": 50, + "signal": "PA14" + }, + { + "number": 51, + "signal": "PA15" + }, + { + "number": 52, + "signal": "PC10" + }, + { + "number": 53, + "signal": "PC11" + }, + { + "number": 54, + "signal": "PC12" + }, + { + "number": 55, + "signal": "PD2" + }, + { + "number": 56, + "signal": "PB3" + }, + { + "number": 57, + "signal": "PB4" + }, + { + "number": 58, + "signal": "PB5" + }, + { + "number": 59, + "signal": "PB6" + }, + { + "number": 60, + "signal": "PB7" + }, + { + "number": 61, + "signal": "PB8", + "doc": "PB8-BOOT0: sampled as BOOT0 at reset while the option bytes' nSWBOOT0 is 1 (the factory setting)" + }, + { + "number": 62, + "signal": "PB9" + }, + { + "number": 63, + "signal": "VSS" + }, + { + "number": 64, + "signal": "VDD" + } + ], + "provenance": { + "author": "EmbSIM", + "license": "Apache-2.0", + "sources": [ + { + "title": "STMicroelectronics STM32_open_pin_data 7d1f151, STM32G474R(B-C-E)Tx.xml (BSD-3-Clause), converted by tools/importers/stm32pins.py; pin 7 named NRST and VREF+ VREFP by hand" + } + ] + } +} diff --git a/catalog/mcus/st/stm32g474re/mcu.json b/catalog/mcus/st/stm32g474re/mcu.json new file mode 100644 index 000000000..0cba7f9ba --- /dev/null +++ b/catalog/mcus/st/stm32g474re/mcu.json @@ -0,0 +1,2258 @@ +{ + "schema_version": 1, + "kind": "mcu", + "id": "st/stm32g474re", + "version": "1.0.0", + "name": "STM32G474RE", + "description": "STMicroelectronics STM32G474RE: an Arm Cortex-M4F at up to 170 MHz with an MPU, 512 KiB of dual-bank flash, 128 KiB of SRAM (80 KiB SRAM1, 16 KiB SRAM2, 32 KiB CCM SRAM), its mathematical accelerators, high-resolution timer and analog front end, in an LQFP64; the NUCLEO-G474RE's MCU.", + "keywords": [ + "stm32g474re", + "stm32g474", + "stm32g4", + "stm32", + "cortex-m4f", + "nucleo", + "nucleo-64" + ], + "vendor": "st", + "family": "stm32g4", + "core": { + "backend": "cortex-m", + "model": "cortex-m4", + "priority_bits": 4, + "timing_tier": "estimated", + "fpu": true, + "mpu": true, + "endian": "little", + "systick": { + "ref_div": 8, + "calib": "0x40000000" + } + }, + "dma_requests": { + "DMAMUX": { + "0": { + "1": [ + "DMAMUX_REQ_GEN0" + ], + "2": [ + "DMAMUX_REQ_GEN1" + ], + "3": [ + "DMAMUX_REQ_GEN2" + ], + "4": [ + "DMAMUX_REQ_GEN3" + ], + "5": [ + "ADC1" + ], + "6": [ + "DAC1_CH1" + ], + "7": [ + "DAC1_CH2" + ], + "8": [ + "TIM6_UP" + ], + "9": [ + "TIM7_UP" + ], + "10": [ + "SPI1_RX" + ], + "11": [ + "SPI1_TX" + ], + "12": [ + "SPI2_RX" + ], + "13": [ + "SPI2_TX" + ], + "14": [ + "SPI3_RX" + ], + "15": [ + "SPI3_TX" + ], + "16": [ + "I2C1_RX" + ], + "17": [ + "I2C1_TX" + ], + "18": [ + "I2C2_RX" + ], + "19": [ + "I2C2_TX" + ], + "20": [ + "I2C3_RX" + ], + "21": [ + "I2C3_TX" + ], + "22": [ + "I2C4_RX" + ], + "23": [ + "I2C4_TX" + ], + "24": [ + "USART1_RX" + ], + "25": [ + "USART1_TX" + ], + "26": [ + "USART2_RX" + ], + "27": [ + "USART2_TX" + ], + "28": [ + "USART3_RX" + ], + "29": [ + "USART3_TX" + ], + "30": [ + "UART4_RX" + ], + "31": [ + "UART4_TX" + ], + "32": [ + "UART5_RX" + ], + "33": [ + "UART5_TX" + ], + "34": [ + "LPUART1_RX" + ], + "35": [ + "LPUART1_TX" + ], + "36": [ + "ADC2" + ], + "37": [ + "ADC3" + ], + "38": [ + "ADC4" + ], + "39": [ + "ADC5" + ], + "40": [ + "QUADSPI" + ], + "41": [ + "DAC2_CH1" + ], + "42": [ + "TIM1_CH1" + ], + "43": [ + "TIM1_CH2" + ], + "44": [ + "TIM1_CH3" + ], + "45": [ + "TIM1_CH4" + ], + "46": [ + "TIM1_UP" + ], + "47": [ + "TIM1_TRIG" + ], + "48": [ + "TIM1_COM" + ], + "49": [ + "TIM8_CH1" + ], + "50": [ + "TIM8_CH2" + ], + "51": [ + "TIM8_CH3" + ], + "52": [ + "TIM8_CH4" + ], + "53": [ + "TIM8_UP" + ], + "54": [ + "TIM8_TRIG" + ], + "55": [ + "TIM8_COM" + ], + "56": [ + "TIM2_CH1" + ], + "57": [ + "TIM2_CH2" + ], + "58": [ + "TIM2_CH3" + ], + "59": [ + "TIM2_CH4" + ], + "60": [ + "TIM2_UP" + ], + "61": [ + "TIM3_CH1" + ], + "62": [ + "TIM3_CH2" + ], + "63": [ + "TIM3_CH3" + ], + "64": [ + "TIM3_CH4" + ], + "65": [ + "TIM3_UP" + ], + "66": [ + "TIM3_TRIG" + ], + "67": [ + "TIM4_CH1" + ], + "68": [ + "TIM4_CH2" + ], + "69": [ + "TIM4_CH3" + ], + "70": [ + "TIM4_CH4" + ], + "71": [ + "TIM4_UP" + ], + "72": [ + "TIM5_CH1" + ], + "73": [ + "TIM5_CH2" + ], + "74": [ + "TIM5_CH3" + ], + "75": [ + "TIM5_CH4" + ], + "76": [ + "TIM5_UP" + ], + "77": [ + "TIM5_TRIG" + ], + "78": [ + "TIM15_CH1" + ], + "79": [ + "TIM15_UP" + ], + "80": [ + "TIM15_TRIG" + ], + "81": [ + "TIM15_COM" + ], + "82": [ + "TIM16_CH1" + ], + "83": [ + "TIM16_UP" + ], + "84": [ + "TIM17_CH1" + ], + "85": [ + "TIM17_UP" + ], + "86": [ + "TIM20_CH1" + ], + "87": [ + "TIM20_CH2" + ], + "88": [ + "TIM20_CH3" + ], + "89": [ + "TIM20_CH4" + ], + "90": [ + "TIM20_UP" + ], + "93": [ + "TIM20_TRIG" + ], + "94": [ + "TIM20_COM" + ], + "95": [ + "HRTIM1_M" + ], + "96": [ + "HRTIM1_A" + ], + "97": [ + "HRTIM1_B" + ], + "98": [ + "HRTIM1_C" + ], + "99": [ + "HRTIM1_D" + ], + "100": [ + "HRTIM1_E" + ], + "101": [ + "HRTIM1_F" + ], + "102": [ + "DAC3_CH1" + ], + "103": [ + "DAC3_CH2" + ], + "104": [ + "DAC4_CH1" + ], + "105": [ + "DAC4_CH2" + ], + "106": [ + "SPI4_RX" + ], + "107": [ + "SPI4_TX" + ], + "108": [ + "SAI1_A" + ], + "109": [ + "SAI1_B" + ], + "110": [ + "FMAC_READ" + ], + "111": [ + "FMAC_WRITE" + ], + "112": [ + "CORDIC_READ" + ], + "113": [ + "CORDIC_WRITE" + ], + "114": [ + "UCPD1_RX" + ], + "115": [ + "UCPD1_TX" + ] + } + } + }, + "memory": [ + { + "name": "flash", + "base": "0x08000000", + "size": "512K", + "kind": "flash", + "erased": "0xFFFFFFFF", + "doc": "Main memory: bank 1 at 0x08000000 and bank 2 at 0x08040000, 128 pages of 2 KiB each in the factory's dual-bank mode (DBANK 1), or 128 of 4 KiB in single-bank mode" + }, + { + "name": "flash_alias", + "base": "0x00000000", + "size": "512K", + "kind": "alias", + "target": "0x08000000", + "doc": "Boot alias of the main flash when BOOT0 is low" + }, + { + "name": "sram", + "base": "0x20000000", + "size": "128K", + "kind": "ram", + "main": true, + "doc": "SRAM1 (80 KiB) and SRAM2 (16 KiB), contiguous, then the CCM SRAM's alias at 0x20018000 (RM0440 2.4)" + }, + { + "name": "ccm_sram", + "base": "0x10000000", + "size": "32K", + "kind": "alias", + "target": "0x20018000", + "doc": "CCM SRAM at its code-bus address, the same 32 KiB as at 0x20018000" + }, + { + "name": "system_memory", + "base": "0x1FFF0000", + "size": "28K", + "kind": "rom", + "doc": "ST's bootloader; contents not shipped" + }, + { + "name": "otp", + "base": "0x1FFF7000", + "size": "1K", + "kind": "flash", + "erased": "0xFFFFFFFF", + "doc": "One-time programmable area: 1 KiB, programmed by double words" + }, + { + "name": "device_id", + "base": "0x1FFF7500", + "size": 256, + "kind": "rom", + "erased": "0xFFFFFFFF", + "doc": "The engineering bytes (RM0440 48): the unique device ID, the flash size and the factory calibration values (DS12288 5.3.4, 5.3.25). Each real part has its own; these are one part's, with the datasheet's typical values: VREFINT 1.212 V and the temperature sensor's 0.76 V at 30 degC, 2.5 mV/degC, read at VREF+ 3.0 V", + "contents": [ + { + "offset": "0x90", + "bytes": "35002100474d495331424d45", + "doc": "UID: X 0x35, Y 0x21 on wafer 0x47 of lot EMBSIM1" + }, + { + "offset": "0xA8", + "bytes": "0d04", + "doc": "TS_CAL1: 1037, the temperature sensor at 30 degC and VREF+ 3.0 V" + }, + { + "offset": "0xAA", + "bytes": "7606", + "doc": "VREFINT_CAL: 1654, VREFINT at 30 degC and VREF+ 3.0 V" + }, + { + "offset": "0xCA", + "bytes": "6305", + "doc": "TS_CAL2: 1379, the temperature sensor at 130 degC and VREF+ 3.0 V" + }, + { + "offset": "0xE0", + "bytes": "0002", + "doc": "FLASH_SIZE: 512 Kbytes" + } + ] + }, + { + "name": "option_bytes", + "base": "0x1FFF7800", + "size": 48, + "kind": "flash", + "erased": "0xFFFFFFFF", + "doc": "Bank 1's option bytes as the part leaves the factory (RM0440 5.4.1), each word followed by its complement: RDP level 0, dual bank, BOOT0 from PB8, NRST bidirectional, no write or code protection (the PCROP and WRP start pages above their end pages)", + "contents": [ + { + "offset": "0x00", + "bytes": "aaf8efff55071000", + "doc": "USER and RDP: 0xFFEFF8AA (RDP 0xAA level 0, BOR_LEV 0, the watchdogs by software, DBANK 1, nSWBOOT0 1 and nBOOT0 1: BOOT0 from PB8, NRST_MODE 11), then its complement" + }, + { + "offset": "0x08", + "bytes": "ff7f00000080ffff", + "doc": "PCROP1_STRT 0x7FFF, above PCROP1_END: no proprietary code protection" + }, + { + "offset": "0x10", + "bytes": "00000000ffffffff", + "doc": "PCROP1_END 0" + }, + { + "offset": "0x18", + "bytes": "7f00000080ffffff", + "doc": "WRP1A: start page 0x7F above end page 0, no write protection" + }, + { + "offset": "0x20", + "bytes": "7f00000080ffffff", + "doc": "WRP1B: likewise" + }, + { + "offset": "0x28", + "bytes": "00000000ffffffff", + "doc": "SEC1R: no securable area, BOOT_LOCK clear" + } + ] + }, + { + "name": "option_bytes_2", + "base": "0x1FFFF800", + "size": 48, + "kind": "flash", + "erased": "0xFFFFFFFF", + "doc": "Bank 2's option bytes as the part leaves the factory, each word followed by its complement: no write or code protection", + "contents": [ + { + "offset": "0x08", + "bytes": "ff7f00000080ffff", + "doc": "PCROP2_STRT 0x7FFF, above PCROP2_END: no proprietary code protection" + }, + { + "offset": "0x10", + "bytes": "00000000ffffffff", + "doc": "PCROP2_END 0" + }, + { + "offset": "0x18", + "bytes": "7f00000080ffffff", + "doc": "WRP2A: start page 0x7F above end page 0, no write protection" + }, + { + "offset": "0x20", + "bytes": "7f00000080ffffff", + "doc": "WRP2B: likewise" + }, + { + "offset": "0x28", + "bytes": "00000000ffffffff", + "doc": "SEC2R: no securable area" + } + ] + }, + { + "name": "sramcan", + "base": "0x4000A400", + "size": "0xA00", + "kind": "ram", + "doc": "The FDCANs' message RAM, 212 words each for FDCAN1 to FDCAN3 (RM0440 44.3.3)" + }, + { + "name": "usb_pma", + "base": "0x40006000", + "size": "1K", + "kind": "ram", + "doc": "The USB device's packet memory, 1 KiB (RM0440 45.5)" + } + ], + "clocks": { + "sources": [ + { + "name": "hsi", + "hz": 16000000, + "doc": "Internal 16 MHz RC (HSI16), the clock out of reset" + }, + { + "name": "hse", + "hz": "board", + "doc": "External crystal 4 to 48 MHz, or an external clock up to 48 MHz (bypass)" + }, + { + "name": "lsi", + "hz": 32000, + "doc": "Internal low-speed RC, 32 kHz" + }, + { + "name": "lse", + "hz": "board", + "doc": "External 32.768 kHz crystal" + }, + { + "name": "hsi48", + "hz": 48000000, + "doc": "Internal 48 MHz RC for the USB, trimmed by the CRS" + } + ], + "reset_core_hz": 16000000, + "max_core_hz": 170000000 + }, + "register_file": { + "format": "embsim", + "file": "registers.json", + "vendored": true, + "license": "Apache-2.0 (converted from STMicroelectronics' STM32G474.svd v3.0, Copyright (c) 2024 STMicroelectronics; LICENSES/Apache-2.0.txt)" + }, + "peripherals": [ + { + "match": "RCC", + "model": "stm32g4-rcc", + "order": 0 + }, + { + "match": "FLASH", + "model": "stm32g4-flash", + "order": 1 + }, + { + "match": "PWR", + "model": "stm32g4-pwr" + }, + { + "match": "SYSCFG", + "model": "stm32f4-syscfg" + }, + { + "match": "EXTI", + "model": "stm32-exti" + }, + { + "match": "GPIO*", + "model": "stm32f4-gpio" + }, + { + "match": "TIM*", + "model": "stm32-tim" + }, + { + "match": "USART*", + "model": "stm32-usart-v2" + }, + { + "match": "UART*", + "model": "stm32-usart-v2" + }, + { + "match": "LPUART1", + "model": "stm32-usart-v2" + }, + { + "match": "IWDG", + "model": "stm32-iwdg" + }, + { + "match": "WWDG", + "model": "stm32-wwdg" + }, + { + "match": "CRC", + "model": "stm32-crc" + }, + { + "match": "DBGMCU", + "model": "stm32f4-dbgmcu" + } + ], + "io": { + "family": "cmos_3v3", + "ports": [ + { + "name": "A", + "pins": 16 + }, + { + "name": "B", + "pins": 16 + }, + { + "name": "C", + "pins": 16 + }, + { + "name": "D", + "pins": 16 + }, + { + "name": "E", + "pins": 16 + }, + { + "name": "F", + "pins": 16 + }, + { + "name": "G", + "pins": 16 + } + ], + "electrical": { + "vdd": 3.3, + "voh": 2.9, + "vol": 0.4, + "rout": { + "low": 60, + "medium": 50, + "fast": 40, + "high": 30 + }, + "vih": 1.88, + "vil": 1.23, + "hysteresis": 0.2, + "rpull": 40000, + "leak_a": 1e-07, + "slew_v_per_us": { + "low": 40, + "medium": 200, + "fast": 400, + "high": 700 + }, + "ioh_max": 0.02, + "iol_max": 0.02 + }, + "analog": { + "PA0": "ADC12_IN1", + "PA1": "ADC12_IN2", + "PA2": "ADC1_IN3", + "PA3": "ADC1_IN4", + "PA4": "ADC2_IN17", + "PA5": "ADC2_IN13", + "PA6": "ADC2_IN3", + "PA7": "ADC2_IN4", + "PA8": "ADC5_IN1", + "PA9": "ADC5_IN2", + "PB0": "ADC1_IN15, ADC3_IN12", + "PB1": "ADC1_IN12, ADC3_IN1", + "PB2": "ADC2_IN12", + "PB11": "ADC12_IN14", + "PB12": "ADC1_IN11, ADC4_IN3", + "PB13": "ADC3_IN5", + "PB14": "ADC1_IN5, ADC4_IN4", + "PB15": "ADC2_IN15, ADC4_IN5", + "PC0": "ADC12_IN6", + "PC1": "ADC12_IN7", + "PC2": "ADC12_IN8", + "PC3": "ADC12_IN9", + "PC4": "ADC2_IN5", + "PC5": "ADC2_IN11", + "PF0": "ADC1_IN10", + "PF1": "ADC2_IN10" + }, + "alternate": { + "PA0": { + "1": [ + "TIM2_CH1" + ], + "2": [ + "TIM5_CH1" + ], + "7": [ + "USART2_CTS", + "USART2_NSS" + ], + "8": [ + "COMP1_OUT" + ], + "9": [ + "TIM8_BKIN" + ], + "10": [ + "TIM8_ETR" + ], + "14": [ + "TIM2_ETR" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA1": { + "0": [ + "RTC_REFIN" + ], + "1": [ + "TIM2_CH2" + ], + "2": [ + "TIM5_CH2" + ], + "7": [ + "USART2_DE", + "USART2_RTS" + ], + "9": [ + "TIM15_CH1N" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA2": { + "1": [ + "TIM2_CH3" + ], + "2": [ + "TIM5_CH3" + ], + "7": [ + "USART2_TX" + ], + "8": [ + "COMP2_OUT" + ], + "9": [ + "TIM15_CH1" + ], + "10": [ + "QUADSPI1_BK1_NCS" + ], + "12": [ + "LPUART1_TX" + ], + "14": [ + "UCPD1_FRSTX1", + "UCPD1_FRSTX2" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA3": { + "1": [ + "TIM2_CH4" + ], + "2": [ + "TIM5_CH4" + ], + "3": [ + "SAI1_CK1" + ], + "7": [ + "USART2_RX" + ], + "9": [ + "TIM15_CH2" + ], + "10": [ + "QUADSPI1_CLK" + ], + "12": [ + "LPUART1_RX" + ], + "13": [ + "SAI1_MCLK_A" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA4": { + "2": [ + "TIM3_CH2" + ], + "5": [ + "SPI1_NSS" + ], + "6": [ + "I2S3_WS", + "SPI3_NSS" + ], + "7": [ + "USART2_CK" + ], + "13": [ + "SAI1_FS_B" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA5": { + "1": [ + "TIM2_CH1" + ], + "2": [ + "TIM2_ETR" + ], + "5": [ + "SPI1_SCK" + ], + "14": [ + "UCPD1_FRSTX1", + "UCPD1_FRSTX2" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA6": { + "1": [ + "TIM16_CH1" + ], + "2": [ + "TIM3_CH1" + ], + "4": [ + "TIM8_BKIN" + ], + "5": [ + "SPI1_MISO" + ], + "6": [ + "TIM1_BKIN" + ], + "8": [ + "COMP1_OUT" + ], + "10": [ + "QUADSPI1_BK1_IO3" + ], + "12": [ + "LPUART1_CTS" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA7": { + "1": [ + "TIM17_CH1" + ], + "2": [ + "TIM3_CH2" + ], + "4": [ + "TIM8_CH1N" + ], + "5": [ + "SPI1_MOSI" + ], + "6": [ + "TIM1_CH1N" + ], + "8": [ + "COMP2_OUT" + ], + "10": [ + "QUADSPI1_BK1_IO2" + ], + "14": [ + "UCPD1_FRSTX1", + "UCPD1_FRSTX2" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA8": { + "0": [ + "RCC_MCO" + ], + "2": [ + "I2C3_SCL" + ], + "4": [ + "I2C2_SDA" + ], + "5": [ + "I2S2_MCK" + ], + "6": [ + "TIM1_CH1" + ], + "7": [ + "USART1_CK" + ], + "8": [ + "COMP7_OUT" + ], + "10": [ + "TIM4_ETR" + ], + "11": [ + "FDCAN3_RX" + ], + "12": [ + "SAI1_CK2" + ], + "13": [ + "HRTIM1_CHA1" + ], + "14": [ + "SAI1_SCK_A" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA9": { + "2": [ + "I2C3_SMBA" + ], + "4": [ + "I2C2_SCL" + ], + "5": [ + "I2S3_MCK" + ], + "6": [ + "TIM1_CH2" + ], + "7": [ + "USART1_TX" + ], + "8": [ + "COMP5_OUT" + ], + "9": [ + "TIM15_BKIN" + ], + "10": [ + "TIM2_CH3" + ], + "13": [ + "HRTIM1_CHA2" + ], + "14": [ + "SAI1_FS_A" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA10": { + "1": [ + "TIM17_BKIN" + ], + "3": [ + "CRS_SYNC" + ], + "4": [ + "I2C2_SMBA" + ], + "5": [ + "SPI2_MISO" + ], + "6": [ + "TIM1_CH3" + ], + "7": [ + "USART1_RX" + ], + "8": [ + "COMP6_OUT" + ], + "10": [ + "TIM2_CH4" + ], + "11": [ + "TIM8_BKIN" + ], + "12": [ + "SAI1_D1" + ], + "13": [ + "HRTIM1_CHB1" + ], + "14": [ + "SAI1_SD_A" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA11": { + "5": [ + "I2S2_SD", + "SPI2_MOSI" + ], + "6": [ + "TIM1_CH1N" + ], + "7": [ + "USART1_CTS", + "USART1_NSS" + ], + "8": [ + "COMP1_OUT" + ], + "9": [ + "FDCAN1_RX" + ], + "10": [ + "TIM4_CH1" + ], + "11": [ + "TIM1_CH4" + ], + "12": [ + "TIM1_BKIN2" + ], + "13": [ + "HRTIM1_CHB2" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA12": { + "1": [ + "TIM16_CH1" + ], + "5": [ + "I2S_CKIN" + ], + "6": [ + "TIM1_CH2N" + ], + "7": [ + "USART1_DE", + "USART1_RTS" + ], + "8": [ + "COMP2_OUT" + ], + "9": [ + "FDCAN1_TX" + ], + "10": [ + "TIM4_CH2" + ], + "11": [ + "TIM1_ETR" + ], + "13": [ + "HRTIM1_FLT1" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA13": { + "0": [ + "JTMS_SWDIO" + ], + "1": [ + "TIM16_CH1N" + ], + "3": [ + "I2C4_SCL" + ], + "4": [ + "I2C1_SCL" + ], + "5": [ + "IR_OUT" + ], + "7": [ + "USART3_CTS", + "USART3_NSS" + ], + "10": [ + "TIM4_CH3" + ], + "13": [ + "SAI1_SD_B" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA14": { + "0": [ + "JTCK_SWCLK" + ], + "1": [ + "LPTIM1_OUT" + ], + "3": [ + "I2C4_SMBA" + ], + "4": [ + "I2C1_SDA" + ], + "5": [ + "TIM8_CH2" + ], + "6": [ + "TIM1_BKIN" + ], + "7": [ + "USART2_TX" + ], + "13": [ + "SAI1_FS_B" + ], + "15": [ + "EVENTOUT" + ] + }, + "PA15": { + "0": [ + "JTDI" + ], + "1": [ + "TIM2_CH1" + ], + "2": [ + "TIM8_CH1" + ], + "4": [ + "I2C1_SCL" + ], + "5": [ + "SPI1_NSS" + ], + "6": [ + "I2S3_WS", + "SPI3_NSS" + ], + "7": [ + "USART2_RX" + ], + "8": [ + "UART4_DE", + "UART4_RTS" + ], + "9": [ + "TIM1_BKIN" + ], + "11": [ + "FDCAN3_TX" + ], + "13": [ + "HRTIM1_FLT2" + ], + "14": [ + "TIM2_ETR" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB0": { + "2": [ + "TIM3_CH3" + ], + "4": [ + "TIM8_CH2N" + ], + "6": [ + "TIM1_CH2N" + ], + "10": [ + "QUADSPI1_BK1_IO1" + ], + "13": [ + "HRTIM1_FLT5" + ], + "14": [ + "UCPD1_FRSTX1", + "UCPD1_FRSTX2" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB1": { + "2": [ + "TIM3_CH4" + ], + "4": [ + "TIM8_CH3N" + ], + "6": [ + "TIM1_CH3N" + ], + "8": [ + "COMP4_OUT" + ], + "10": [ + "QUADSPI1_BK1_IO0" + ], + "12": [ + "LPUART1_DE", + "LPUART1_RTS" + ], + "13": [ + "HRTIM1_SCOUT" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB2": { + "0": [ + "RTC_OUT2" + ], + "1": [ + "LPTIM1_OUT" + ], + "2": [ + "TIM5_CH1" + ], + "3": [ + "TIM20_CH1" + ], + "4": [ + "I2C3_SMBA" + ], + "10": [ + "QUADSPI1_BK2_IO1" + ], + "13": [ + "HRTIM1_SCIN" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB3": { + "0": [ + "JTDO_SWO" + ], + "1": [ + "TIM2_CH2" + ], + "2": [ + "TIM4_ETR" + ], + "3": [ + "CRS_SYNC" + ], + "4": [ + "TIM8_CH1N" + ], + "5": [ + "SPI1_SCK" + ], + "6": [ + "I2S3_CK", + "SPI3_SCK" + ], + "7": [ + "USART2_TX" + ], + "10": [ + "TIM3_ETR" + ], + "11": [ + "FDCAN3_RX" + ], + "12": [ + "HRTIM1_SCOUT" + ], + "13": [ + "HRTIM1_EEV9" + ], + "14": [ + "SAI1_SCK_B" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB4": { + "0": [ + "JTRST" + ], + "1": [ + "TIM16_CH1" + ], + "2": [ + "TIM3_CH1" + ], + "4": [ + "TIM8_CH2N" + ], + "5": [ + "SPI1_MISO" + ], + "6": [ + "SPI3_MISO" + ], + "7": [ + "USART2_RX" + ], + "8": [ + "UART5_DE", + "UART5_RTS" + ], + "10": [ + "TIM17_BKIN" + ], + "11": [ + "FDCAN3_TX" + ], + "13": [ + "HRTIM1_EEV7" + ], + "14": [ + "SAI1_MCLK_B" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB5": { + "1": [ + "TIM16_BKIN" + ], + "2": [ + "TIM3_CH2" + ], + "3": [ + "TIM8_CH3N" + ], + "4": [ + "I2C1_SMBA" + ], + "5": [ + "SPI1_MOSI" + ], + "6": [ + "I2S3_SD", + "SPI3_MOSI" + ], + "7": [ + "USART2_CK" + ], + "8": [ + "I2C3_SDA" + ], + "9": [ + "FDCAN2_RX" + ], + "10": [ + "TIM17_CH1" + ], + "11": [ + "LPTIM1_IN1" + ], + "12": [ + "SAI1_SD_B" + ], + "13": [ + "HRTIM1_EEV6" + ], + "14": [ + "UART5_CTS" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB6": { + "1": [ + "TIM16_CH1N" + ], + "2": [ + "TIM4_CH1" + ], + "5": [ + "TIM8_CH1" + ], + "6": [ + "TIM8_ETR" + ], + "7": [ + "USART1_TX" + ], + "8": [ + "COMP4_OUT" + ], + "9": [ + "FDCAN2_TX" + ], + "10": [ + "TIM8_BKIN2" + ], + "11": [ + "LPTIM1_ETR" + ], + "12": [ + "HRTIM1_SCIN" + ], + "13": [ + "HRTIM1_EEV4" + ], + "14": [ + "SAI1_FS_B" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB7": { + "1": [ + "TIM17_CH1N" + ], + "2": [ + "TIM4_CH2" + ], + "3": [ + "I2C4_SDA" + ], + "4": [ + "I2C1_SDA" + ], + "5": [ + "TIM8_BKIN" + ], + "7": [ + "USART1_RX" + ], + "8": [ + "COMP3_OUT" + ], + "10": [ + "TIM3_CH4" + ], + "11": [ + "LPTIM1_IN2" + ], + "12": [ + "FMC_NL" + ], + "13": [ + "HRTIM1_EEV3" + ], + "14": [ + "UART4_CTS" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB8": { + "1": [ + "TIM16_CH1" + ], + "2": [ + "TIM4_CH3" + ], + "3": [ + "SAI1_CK1" + ], + "4": [ + "I2C1_SCL" + ], + "7": [ + "USART3_RX" + ], + "8": [ + "COMP1_OUT" + ], + "9": [ + "FDCAN1_RX" + ], + "10": [ + "TIM8_CH2" + ], + "12": [ + "TIM1_BKIN" + ], + "13": [ + "HRTIM1_EEV8" + ], + "14": [ + "SAI1_MCLK_A" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB9": { + "1": [ + "TIM17_CH1" + ], + "2": [ + "TIM4_CH4" + ], + "3": [ + "SAI1_D2" + ], + "4": [ + "I2C1_SDA" + ], + "6": [ + "IR_OUT" + ], + "7": [ + "USART3_TX" + ], + "8": [ + "COMP2_OUT" + ], + "9": [ + "FDCAN1_TX" + ], + "10": [ + "TIM8_CH3" + ], + "12": [ + "TIM1_CH3N" + ], + "13": [ + "HRTIM1_EEV5" + ], + "14": [ + "SAI1_FS_A" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB10": { + "1": [ + "TIM2_CH3" + ], + "7": [ + "USART3_TX" + ], + "8": [ + "LPUART1_RX" + ], + "10": [ + "QUADSPI1_CLK" + ], + "12": [ + "TIM1_BKIN" + ], + "13": [ + "HRTIM1_FLT3" + ], + "14": [ + "SAI1_SCK_A" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB11": { + "1": [ + "TIM2_CH4" + ], + "7": [ + "USART3_RX" + ], + "8": [ + "LPUART1_TX" + ], + "10": [ + "QUADSPI1_BK1_NCS" + ], + "13": [ + "HRTIM1_FLT4" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB12": { + "2": [ + "TIM5_ETR" + ], + "4": [ + "I2C2_SMBA" + ], + "5": [ + "I2S2_WS", + "SPI2_NSS" + ], + "6": [ + "TIM1_BKIN" + ], + "7": [ + "USART3_CK" + ], + "8": [ + "LPUART1_DE", + "LPUART1_RTS" + ], + "9": [ + "FDCAN2_RX" + ], + "13": [ + "HRTIM1_CHC1" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB13": { + "5": [ + "I2S2_CK", + "SPI2_SCK" + ], + "6": [ + "TIM1_CH1N" + ], + "7": [ + "USART3_CTS", + "USART3_NSS" + ], + "8": [ + "LPUART1_CTS" + ], + "9": [ + "FDCAN2_TX" + ], + "13": [ + "HRTIM1_CHC2" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB14": { + "1": [ + "TIM15_CH1" + ], + "5": [ + "SPI2_MISO" + ], + "6": [ + "TIM1_CH2N" + ], + "7": [ + "USART3_DE", + "USART3_RTS" + ], + "8": [ + "COMP4_OUT" + ], + "13": [ + "HRTIM1_CHD1" + ], + "15": [ + "EVENTOUT" + ] + }, + "PB15": { + "0": [ + "RTC_REFIN" + ], + "1": [ + "TIM15_CH2" + ], + "2": [ + "TIM15_CH1N" + ], + "3": [ + "COMP3_OUT" + ], + "4": [ + "TIM1_CH3N" + ], + "5": [ + "I2S2_SD", + "SPI2_MOSI" + ], + "13": [ + "HRTIM1_CHD2" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC0": { + "1": [ + "LPTIM1_IN1" + ], + "2": [ + "TIM1_CH1" + ], + "8": [ + "LPUART1_RX" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC1": { + "1": [ + "LPTIM1_OUT" + ], + "2": [ + "TIM1_CH2" + ], + "8": [ + "LPUART1_TX" + ], + "10": [ + "QUADSPI1_BK2_IO0" + ], + "13": [ + "SAI1_SD_A" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC2": { + "1": [ + "LPTIM1_IN2" + ], + "2": [ + "TIM1_CH3" + ], + "3": [ + "COMP3_OUT" + ], + "6": [ + "TIM20_CH2" + ], + "10": [ + "QUADSPI1_BK2_IO1" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC3": { + "0": [ + "SLEEP" + ], + "1": [ + "LPTIM1_ETR" + ], + "2": [ + "TIM1_CH4" + ], + "3": [ + "SAI1_D1" + ], + "6": [ + "TIM1_BKIN2" + ], + "10": [ + "QUADSPI1_BK2_IO2" + ], + "13": [ + "SAI1_SD_A" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC4": { + "2": [ + "TIM1_ETR" + ], + "4": [ + "I2C2_SCL" + ], + "7": [ + "USART1_TX" + ], + "10": [ + "QUADSPI1_BK2_IO3" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC5": { + "2": [ + "TIM15_BKIN" + ], + "3": [ + "SAI1_D3" + ], + "6": [ + "TIM1_CH4N" + ], + "7": [ + "USART1_RX" + ], + "13": [ + "HRTIM1_EEV10" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC6": { + "2": [ + "TIM3_CH1" + ], + "3": [ + "HRTIM1_EEV10" + ], + "4": [ + "TIM8_CH1" + ], + "6": [ + "I2S2_MCK" + ], + "7": [ + "COMP6_OUT" + ], + "8": [ + "I2C4_SCL" + ], + "13": [ + "HRTIM1_CHF1" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC7": { + "2": [ + "TIM3_CH2" + ], + "3": [ + "HRTIM1_FLT5" + ], + "4": [ + "TIM8_CH2" + ], + "6": [ + "I2S3_MCK" + ], + "7": [ + "COMP5_OUT" + ], + "8": [ + "I2C4_SDA" + ], + "13": [ + "HRTIM1_CHF2" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC8": { + "2": [ + "TIM3_CH3" + ], + "3": [ + "HRTIM1_CHE1" + ], + "4": [ + "TIM8_CH3" + ], + "6": [ + "TIM20_CH3" + ], + "7": [ + "COMP7_OUT" + ], + "8": [ + "I2C3_SCL" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC9": { + "2": [ + "TIM3_CH4" + ], + "3": [ + "HRTIM1_CHE2" + ], + "4": [ + "TIM8_CH4" + ], + "5": [ + "I2S_CKIN" + ], + "6": [ + "TIM8_BKIN2" + ], + "8": [ + "I2C3_SDA" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC10": { + "4": [ + "TIM8_CH1N" + ], + "5": [ + "UART4_TX" + ], + "6": [ + "I2S3_CK", + "SPI3_SCK" + ], + "7": [ + "USART3_TX" + ], + "13": [ + "HRTIM1_FLT6" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC11": { + "3": [ + "HRTIM1_EEV2" + ], + "4": [ + "TIM8_CH2N" + ], + "5": [ + "UART4_RX" + ], + "6": [ + "SPI3_MISO" + ], + "7": [ + "USART3_RX" + ], + "8": [ + "I2C3_SDA" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC12": { + "1": [ + "TIM5_CH2" + ], + "3": [ + "HRTIM1_EEV1" + ], + "4": [ + "TIM8_CH3N" + ], + "5": [ + "UART5_TX" + ], + "6": [ + "I2S3_SD", + "SPI3_MOSI" + ], + "7": [ + "USART3_CK" + ], + "14": [ + "UCPD1_FRSTX1", + "UCPD1_FRSTX2" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC13": { + "2": [ + "TIM1_BKIN" + ], + "4": [ + "TIM1_CH1N" + ], + "6": [ + "TIM8_CH4N" + ], + "15": [ + "EVENTOUT" + ] + }, + "PC14": { + "15": [ + "EVENTOUT" + ] + }, + "PC15": { + "15": [ + "EVENTOUT" + ] + }, + "PD2": { + "2": [ + "TIM3_ETR" + ], + "4": [ + "TIM8_BKIN" + ], + "5": [ + "UART5_RX" + ], + "15": [ + "EVENTOUT" + ] + }, + "PF0": { + "4": [ + "I2C2_SDA" + ], + "5": [ + "I2S2_WS", + "SPI2_NSS" + ], + "6": [ + "TIM1_CH3N" + ], + "15": [ + "EVENTOUT" + ] + }, + "PF1": { + "5": [ + "I2S2_CK", + "SPI2_SCK" + ], + "15": [ + "EVENTOUT" + ] + }, + "PG10": { + "0": [ + "RCC_MCO" + ], + "15": [ + "EVENTOUT" + ] + } + } + }, + "signals": [ + "VBAT", + "PC13", + "PC14", + "PC15", + "PF0", + "PF1", + "NRST", + "PC0", + "PC1", + "PC2", + "PC3", + "PA0", + "PA1", + "PA2", + "VSS", + "VDD", + "PA3", + "PA4", + "PA5", + "PA6", + "PA7", + "PC4", + "PC5", + "PB0", + "PB1", + "PB2", + "VSSA", + "VREFP", + "VDDA", + "PB10", + "PB11", + "PB12", + "PB13", + "PB14", + "PB15", + "PC6", + "PC7", + "PC8", + "PC9", + "PA8", + "PA9", + "PA10", + "PA11", + "PA12", + "PA13", + "PA14", + "PA15", + "PC10", + "PC11", + "PC12", + "PD2", + "PB3", + "PB4", + "PB5", + "PB6", + "PB7", + "PB8", + "PB9" + ], + "packages": { + "lqfp64": "lqfp64.json" + }, + "console": { + "default": "LPUART1" + }, + "fidelity": { + "functional": { + "claims": "Cortex-M4F instruction execution (Thumb-2 with ARMv7E-M's DSP instructions, FPv4-SP, NVIC with 4 priority bits, SCB, SysTick on HCLK/8, DWT, the MPU with eight regions, lazy floating-point context stacking, semihosting); every register of ST's STM32G474 SVD at its address with its reset value and access type, corrected where RM0440, the CMSIS header or the HAL differ (tools/importers/stm32g474_regs.sh lists the corrections); the memory map (512 KiB of dual-bank flash, SRAM1, SRAM2 and the CCM SRAM at 0x20018000 and its alias at 0x10000000, the system memory, OTP, the engineering bytes with the unique ID, flash size and calibration values, both banks' option bytes, the FDCAN message RAM and the USB packet memory). RCC (rcc_g4.c): HSI16, HSE ready only as the board drives OSC_IN (a crystal without HSEBYP, a clock with it), LSI, LSE and HSI48, each ready its start-up time after it is enabled, LSE kept through every reset but a power-on one; the main PLL from HSI16 or HSE (M, N, P with PLLPDIV, Q, R and their enables), SYSCLK from HSI16, HSE or PLLR switched once ready (SWS), HPRE, PPRE1, PPRE2 and the timers' clock; what the system clock uses cannot be turned off, HSEBYP is kept while HSE is on, BDCR is written only with PWR's DBP and BDRST resets the RTC and TAMP; CIER, CIFR and CICR's ready interrupts; the kernel clocks CCIPR and CCIPR2 select for the U(S)ARTs and LPUART, I2Cs, LPTIM1, SAI1, I2S, FDCAN, the 48 MHz clock, the ADCs and the QUADSPI; MCO's frequency; the peripherals' clock enables (their registers read 0 and ignore writes while off, mcu.clock_gated) and resets; RCC_CSR's reset flags (PINRSTF, BORRSTF, SFTRSTF, IWDGRSTF, WWDGRSTF, LPWRRSTF, OBLRSTF) until RMVF; a VCO, PLL output or SYSCLK outside DS12288's and the voltage range's limits and too few flash wait states for HCLK are reported (mcu.clock_out_of_spec, mcu.flash_wait_states, RM0440 table 9). PWR (pwr_g4.c): the voltage ranges and range 1's boost mode (CR5.R1MODE) bounding SYSCLK, low-power run's REGLPF, the PVD (PVDO against VDD, or PB7 against VREFINT, on EXTI line 16); Stop 0 and Stop 1 (the core's domain's clocks stopped but the RTC's and IWDG's, HSE and the PLL off, an EXTI line's interrupt or event waking the part on HSI16), Standby (RAM lost but SRAM2 with RRS, the pins let go but the pulls CR3.APC keeps from PUCRx/PDCRx and the wake-up pins', a wake-up pin's edge of CR4's polarity, an internal wake-up, NRST or the IWDG ending it with a reset, SR1.SBF), Shutdown (SRAM2 lost too, left through a brownout reset), the option bytes' nRST_STOP, nRST_STDBY and nRST_SHDW. FLASH (flash_g4.c): KEYR's and OPTKEYR's unlock, double-word programming with SIZERR, PGAERR, PGSERR, PROGERR and WRPERR, fast programming of 256-byte rows with MISSERR, page and bank erases, EOP and the error interrupt, BSY for DS12288's typical times, a program running from the bank under operation stalled while the other bank reads on (read-while-write), the option bytes with their complements (OPTVERR on a mismatch) loaded at each reset, OPTSTRT and OBL_LAUNCH's reset, the WRP areas, BOOT0 from PB8 or nBOOT0 with nSWBOOT0 (a system-memory boot reported, mcu.boot_mode), ACR's wait states, prefetch and caches as the fetch timing. GPIO (gpio_f4.c): MODER, OTYPER, OSPEEDR, PUPDR, IDR, ODR, BSRR, BRR, LCKR's lock, AFRL/AFRH choosing among io.alternate's functions, converted from ST's open pin data; SYSCFG's EXTICR, MEMRMP's boot remap and SCSR's CCM SRAM erase; EXTI (exti.c) in two banks: the configurable lines' edges, SWIER, PR, IMR and EMR, their interrupts by line, the direct lines as events. USART1-3, UART4-5 and LPUART1 (usart_v2.c): 7, 8 or 9 bits with parity, the stop bits, MSBFIRST and DATAINV on the line, PRESC and the kernel clock, OVER8, an LPUART's 256 x clock / BRR; TEACK and REACK, the 8-frame FIFOs with their thresholds and flags, TXE/TC, RXNE, ORE (or OVRDIS), PE, FE, IDLE, CMF, RTOF, break and LIN's LBDF, mute mode, nCTS and nRTS, DE for RS-485, SWAP, half-duplex, the synchronous master's CK, wake-up from Stop on HSI16 or LSE, DMA requests, every interrupt; the frames on the TX pin's waveform and decoded from the RX pin. The timers (tim.c, the F4's IP: time base, output compare and PWM, input capture with filters, complementary outputs with dead time and break, the slave modes and encoder, TRGO) with TISEL's internal clocks on TI1 (TIM16 and TIM17: LSI, LSE, HSE/32, MCO; TIM5: LSI, LSE; TIM15: LSE), DBGMCU's freeze bits by name; the programmable CRC (crc.c: POLYSIZE, POL, INIT, REV_IN, REV_OUT); the IWDG with its window (WINR) and the option bytes' hardware start and Stop/Standby freeze, the WWDG with WDGTB's three bits (wdg.c); DBGMCU's IDCODE (0x469) and freeze registers.", + "omissions": [ + "the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, DMA1, DMA2 and DMAMUX, the I2Cs and SPIs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC", + "the timers' G4 additions: OCxM's fourth bit (retriggerable one-pulse, combined and asymmetric PWM), SMS's fourth bit (combined reset and trigger, the extended encoder modes), the internal trigger inputs ITR4 to ITR10 and TS's fifth bit, MMS's fourth bit, channels 5 and 6, dithering (DITHEN: ARR and CCRx read as their 16 integer bits), UIFREMAP, the encoder index (ECR), the asymmetric dead times (DTR2), break 2, the comparators on TISEL and AF1/AF2's break sources, the G4's ITR interconnection table (the F4's is used)", + "the start-up times, flash times and PVD thresholds are DS12288's typical values as transcribed without the datasheet at hand (HSI16 0.8 us, an HSE crystal 2 ms, LSI 80 us, LSE 2 s, HSI48 2.5 us, the PLL's lock 15 us; a double word 81.7 us, a fast row 2.61 ms, a page erase 22.02 ms, a bank erase 22.13 ms; the PVD at 2.0 to 2.9 V), and their spread and dependence on temperature are not modelled", + "RCC: the clock security systems (CSSON, LSECSSON: the oscillators never fail), LSEDRV, HSITRIM and HSI48CAL's effect on the frequencies, the CRS's trimming, a peripheral held in reset while its *RSTR bit stays set, the brownout reset (BORRSTF only at power-on), the sleep-mode enables (*SMENR), MCO and LSCO on their pins", + "PWR: the regulator's settling (VOSF never set) and the wake-up times, the supply currents, the PVMs (VDDA is VDD), UCPD's dead-battery bits, VBAT charging", + "FLASH: the option bytes' programming time, the read protection's levels and their mass erase, PCROP and the securable area, ECC, the bank swap (BFB2, FB_MODE), the boot from SRAM, the power-down modes, the caches' real line length", + "USART: noise detection (NE never sets, ONEBIT does nothing), auto baud rate detection, TXINV and RXINV, DE's assertion and deassertion times (DEAT, DEDT), the synchronous slave, smartcard and IrDA modes, TCBGT", + "SYSCFG: SWPR's write protection of the CCM SRAM, its erase time, the parity errors CFGR2 reports; EXTI: the internal lines' sources but PVD's; GPIO: EVENTOUT, the I/O compensation, the 5 V tolerant pins' clamps", + "the electrical I/O values (io.electrical) are the F446's and DS12288's typical ones, not checked against the datasheet's tables; the package code at 0x1FFF7500 reads erased", + "DBGMCU's REV_ID 0x2001 (the silicon revision is assumed); a halted core draws its sleep current" + ], + "validation": [ + "repo:tests/unit/test_stm32g4.c", + "repo:tests/vendor/stm32cubeg4" + ] + }, + "timed": { + "claims": "As functional, with the Cortex-M4's cycle counts as the core gives them (estimated tier), the flash's wait states, prefetch and caches charged on fetches, and the peripherals' times at their clocks.", + "omissions": [ + "as functional" + ], + "validation": [ + "repo:tests/unit/test_stm32g4.c", + "repo:tests/vendor/stm32cubeg4" + ] + } + }, + "provenance": { + "author": "EmbSIM", + "license": "Apache-2.0", + "sources": [ + { + "title": "RM0440 Reference manual: STM32G4 Series advanced Arm-based 32-bit MCUs" + }, + { + "title": "STM32G474xB/xC/xE datasheet (DS12288)" + }, + { + "title": "PM0214 Programming manual: STM32 Cortex-M4 MCUs and MPUs" + }, + { + "title": "STMicroelectronics STM32G474.svd 3.0 (STM32G4 SVD pack), Apache-2.0, as archived by modm-io/cmsis-svd-stm32" + }, + { + "title": "STMicroelectronics STM32_open_pin_data 7d1f151, STM32G474R(B-C-E)Tx.xml and GPIO-STM32G47x_gpio_v1_0_Modes.xml, BSD-3-Clause" + }, + { + "title": "STMicroelectronics STM32CubeG4 (BSD-3-Clause): the HAL's DMA request numbers (stm32g4xx_hal_dma.h) transcribed into dma_requests, its EXTI line types (stm32g4xx_hal_exti.h) and the CMSIS device header stm32g474xx.h, against which the converted register description was checked field by field" + } + ] + }, + "i18n": { + "fr": { + "source": "5aa1acd3852d", + "description": "STMicroelectronics STM32G474RE : un Arm Cortex-M4F jusqu'à 170 MHz avec MPU, 512 Kio de flash à double banc, 128 Kio de SRAM (80 Kio de SRAM1, 16 Kio de SRAM2, 32 Kio de CCM SRAM), ses accélérateurs mathématiques, son timer haute résolution et sa chaîne analogique, en LQFP64 ; le MCU de la NUCLEO-G474RE.", + "fidelity": { + "functional": { + "claims": "Exécution des instructions Cortex-M4F (Thumb-2 avec les instructions DSP de l'ARMv7E-M, FPv4-SP, NVIC à 4 bits de priorité, SCB, SysTick sur HCLK/8, DWT, la MPU à huit régions, l'empilement paresseux du contexte flottant, le semihosting) ; chaque registre du SVD STM32G474 de ST à son adresse avec sa valeur de reset et son type d'accès, corrigé là où le RM0440, l'en-tête CMSIS ou la HAL diffèrent (tools/importers/stm32g474_regs.sh liste les corrections) ; la carte mémoire (512 Kio de flash à double banc, la SRAM1, la SRAM2 et la CCM SRAM à 0x20018000 et son alias à 0x10000000, la mémoire système, l'OTP, les octets d'ingénierie avec l'identifiant unique, la taille de la flash et les valeurs d'étalonnage, les octets d'option des deux bancs, la RAM de messages des FDCAN et la mémoire de paquets de l'USB). RCC (rcc_g4.c) : HSI16, HSE prêt seulement si la carte pilote OSC_IN (un quartz sans HSEBYP, une horloge avec), LSI, LSE et HSI48, chacun prêt après son temps de démarrage une fois activé, LSE conservé à travers tout reset sauf la mise sous tension ; la PLL principale depuis HSI16 ou HSE (M, N, P avec PLLPDIV, Q, R et leurs activations), SYSCLK depuis HSI16, HSE ou PLLR, basculé une fois prêt (SWS), HPRE, PPRE1, PPRE2 et l'horloge des timers ; ce qu'utilise l'horloge système ne peut être éteint, HSEBYP est conservé tant que HSE est allumé, BDCR n'est écrit qu'avec le DBP du PWR et BDRST réinitialise le RTC et le TAMP ; les interruptions de disponibilité de CIER, CIFR et CICR ; les horloges noyau que sélectionnent CCIPR et CCIPR2 pour les U(S)ART et le LPUART, les I2C, le LPTIM1, le SAI1, l'I2S, les FDCAN, l'horloge 48 MHz, les ADC et le QUADSPI ; la fréquence du MCO ; les activations d'horloge des périphériques (leurs registres lisent 0 et ignorent les écritures quand elle est coupée, mcu.clock_gated) et leurs resets ; les indicateurs de reset de RCC_CSR (PINRSTF, BORRSTF, SFTRSTF, IWDGRSTF, WWDGRSTF, LPWRRSTF, OBLRSTF) jusqu'à RMVF ; un VCO, une sortie de PLL ou un SYSCLK hors des limites du DS12288 et de la plage de tension, et trop peu d'états d'attente de la flash pour HCLK, sont signalés (mcu.clock_out_of_spec, mcu.flash_wait_states, table 9 du RM0440). PWR (pwr_g4.c) : les plages de tension et le mode boost de la plage 1 (CR5.R1MODE) qui bornent SYSCLK, le REGLPF du low-power run, le PVD (PVDO face à VDD, ou PB7 face à VREFINT, sur la ligne EXTI 16) ; Stop 0 et Stop 1 (les horloges du domaine du cœur arrêtées sauf celles du RTC et de l'IWDG, HSE et la PLL éteints, l'interruption ou l'événement d'une ligne EXTI réveillant la puce sur HSI16), Standby (la RAM perdue sauf la SRAM2 avec RRS, les broches relâchées sauf les tirages que CR3.APC conserve depuis PUCRx/PDCRx et ceux des broches de réveil, un front de broche de réveil de la polarité de CR4, un réveil interne, NRST ou l'IWDG y mettant fin par un reset, SR1.SBF), Shutdown (la SRAM2 perdue aussi, quitté par un reset de brownout), les nRST_STOP, nRST_STDBY et nRST_SHDW des octets d'option. FLASH (flash_g4.c) : le déverrouillage par KEYR et OPTKEYR, la programmation par double mot avec SIZERR, PGAERR, PGSERR, PROGERR et WRPERR, la programmation rapide de rangées de 256 octets avec MISSERR, les effacements de page et de banc, EOP et l'interruption d'erreur, BSY pendant les temps typiques du DS12288, un programme qui s'exécute depuis le banc en opération bloqué tandis que l'autre banc reste lisible (lecture pendant l'écriture), les octets d'option avec leurs compléments (OPTVERR en cas de discordance) chargés à chaque reset, OPTSTRT et le reset d'OBL_LAUNCH, les zones WRP, BOOT0 depuis PB8 ou nBOOT0 selon nSWBOOT0 (un démarrage sur la mémoire système signalé, mcu.boot_mode), les états d'attente, le prefetch et les caches d'ACR dans le minutage des lectures d'instructions. GPIO (gpio_f4.c) : MODER, OTYPER, OSPEEDR, PUPDR, IDR, ODR, BSRR, BRR, le verrouillage de LCKR, AFRL/AFRH choisissant parmi les fonctions d'io.alternate, converties des données de broches ouvertes de ST ; l'EXTICR du SYSCFG, le remappage de démarrage de MEMRMP et l'effacement de la CCM SRAM par SCSR ; l'EXTI (exti.c) en deux bancs : les fronts des lignes configurables, SWIER, PR, IMR et EMR, leurs interruptions par ligne, les lignes directes comme événements. USART1-3, UART4-5 et LPUART1 (usart_v2.c) : 7, 8 ou 9 bits avec parité, les bits de stop, MSBFIRST et DATAINV sur la ligne, PRESC et l'horloge noyau, OVER8, le 256 x horloge / BRR d'un LPUART ; TEACK et REACK, les FIFO de 8 trames avec leurs seuils et indicateurs, TXE/TC, RXNE, ORE (ou OVRDIS), PE, FE, IDLE, CMF, RTOF, le break et le LBDF du LIN, le mode muet, nCTS et nRTS, DE pour le RS-485, SWAP, le half-duplex, le CK du maître synchrone, le réveil depuis Stop sur HSI16 ou LSE, les requêtes DMA, toutes les interruptions ; les trames sur la forme d'onde de la broche TX et décodées depuis la broche RX. Les timers (tim.c, l'IP du F4 : base de temps, comparaison de sortie et PWM, capture d'entrée avec filtres, sorties complémentaires avec temps mort et break, les modes esclaves et le codeur, TRGO) avec les horloges internes de TISEL sur TI1 (TIM16 et TIM17 : LSI, LSE, HSE/32, MCO ; TIM5 : LSI, LSE ; TIM15 : LSE), les bits de gel du DBGMCU trouvés par leur nom ; le CRC programmable (crc.c : POLYSIZE, POL, INIT, REV_IN, REV_OUT) ; l'IWDG avec sa fenêtre (WINR), le démarrage matériel et le gel en Stop/Standby des octets d'option, le WWDG avec les trois bits de WDGTB (wdg.c) ; l'IDCODE du DBGMCU (0x469) et ses registres de gel.", + "omissions": [ + "les périphériques que coverage.md indique manquants gardent leurs valeurs de registre et lèvent mcu.unsupported_access : les ADC, DAC, comparateurs, amplis op et VREFBUF, DMA1, DMA2 et le DMAMUX, les I2C et SPI, RTC et TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, les FDCAN, l'USB, l'UCPD, le HRTIM, le QUADSPI, le SAI et le FMC", + "les ajouts G4 des timers : le quatrième bit d'OCxM (one-pulse redéclenchable, PWM combinée et asymétrique), le quatrième bit de SMS (reset et déclenchement combinés, les modes codeur étendus), les entrées de déclenchement internes ITR4 à ITR10 et le cinquième bit de TS, le quatrième bit de MMS, les canaux 5 et 6, le dithering (DITHEN : ARR et CCRx lus comme leurs 16 bits entiers), UIFREMAP, l'index du codeur (ECR), les temps morts asymétriques (DTR2), le break 2, les comparateurs sur TISEL et les sources de break d'AF1/AF2, la table d'interconnexion ITR du G4 (celle du F4 est utilisée)", + "les temps de démarrage, les temps de la flash et les seuils du PVD sont les valeurs typiques du DS12288 transcrites sans la fiche technique sous la main (HSI16 0,8 µs, un quartz HSE 2 ms, LSI 80 µs, LSE 2 s, HSI48 2,5 µs, le verrouillage de la PLL 15 µs ; un double mot 81,7 µs, une rangée rapide 2,61 ms, l'effacement d'une page 22,02 ms, celui d'un banc 22,13 ms ; le PVD de 2,0 à 2,9 V), et leur dispersion et leur dépendance à la température ne sont pas modélisées", + "RCC : les systèmes de sécurité d'horloge (CSSON, LSECSSON : les oscillateurs ne tombent jamais en panne), LSEDRV, l'effet de HSITRIM et HSI48CAL sur les fréquences, l'ajustement par le CRS, un périphérique maintenu en reset tant que son bit *RSTR reste à 1, le reset de brownout (BORRSTF seulement à la mise sous tension), les activations du mode sommeil (*SMENR), MCO et LSCO sur leurs broches", + "PWR : l'établissement du régulateur (VOSF jamais à 1) et les temps de réveil, les courants d'alimentation, les PVM (VDDA vaut VDD), les bits de batterie morte de l'UCPD, la charge de VBAT", + "FLASH : le temps de programmation des octets d'option, les niveaux de protection en lecture et leur effacement total, le PCROP et la zone sécurisable, l'ECC, l'échange de bancs (BFB2, FB_MODE), le démarrage depuis la SRAM, les modes basse consommation, la vraie longueur de ligne des caches", + "USART : la détection de bruit (NE jamais à 1, ONEBIT sans effet), la détection automatique du débit, TXINV et RXINV, les temps d'assertion et de désassertion de DE (DEAT, DEDT), l'esclave synchrone, les modes carte à puce et IrDA, TCBGT", + "SYSCFG : la protection en écriture des pages de la CCM SRAM par SWPR, le temps de son effacement, les erreurs de parité que signale CFGR2 ; EXTI : les sources des lignes internes sauf celle du PVD ; GPIO : EVENTOUT, la cellule de compensation, les écrêtages des broches tolérantes au 5 V", + "les valeurs électriques des E/S (io.electrical) sont celles du F446 et les valeurs typiques du DS12288, non vérifiées sur les tables de la fiche technique ; le code de boîtier à 0x1FFF7500 se lit effacé", + "le REV_ID 0x2001 du DBGMCU (la révision du silicium est supposée) ; un cœur arrêté consomme son courant de sommeil" + ] + }, + "timed": { + "claims": "Comme le niveau fonctionnel, avec les nombres de cycles du Cortex-M4 tels que le cœur les donne (niveau estimé), les états d'attente, le prefetch et les caches de la flash comptés sur les lectures d'instructions, et les temps des périphériques à leurs horloges.", + "omissions": [ + "comme le niveau fonctionnel" + ] + } + } + } + } +} diff --git a/catalog/mcus/st/stm32g474re/registers.json b/catalog/mcus/st/stm32g474re/registers.json new file mode 100644 index 000000000..5e0c0b122 --- /dev/null +++ b/catalog/mcus/st/stm32g474re/registers.json @@ -0,0 +1,45060 @@ +{ + "schema_version": 1, + "kind": "registers", + "id": "st/stm32g474re/registers", + "version": "1.0.0", + "device": "STM32G474", + "source": "converted from STMicroelectronics STM32G474.svd v3.0 by tools/importers/svd2regs.py; peripherals left out: FDCAN (its address is the FDCAN message RAM's (SRAMCAN, RM0440 2.2.2); FDCAN1 to FDCAN3 keep its registers); register names' peripheral prefixes taken off: TIM2 (22), TIM3 (22), TIM6 (8), FDCAN1 (37), PWR (22), VREFBUF (2), COMP (7), TIM1 (28), TIM16 (20), RCC (30), FLASH (18), DAC1 (23); registers renamed as the reference manual names them: TIM15.CCMR1_Output=CCMR1; fields corrected from the reference manual: PWR.SR2.PVMO1:12:1:r, PWR.SR2.PVMO2:13:1:r, PWR.SR2.PVMO3:14:1:r, PWR.SR2.PVMO4:15:1:r, QUADSPI.CR.FTHRES:8:4, TIM2.CNT.CNT:0:32, DBGMCU.IDCODE.DEV_ID:0:12:r, TIM1.CCMR1.OC1M_3:16:1, TIM1.CCMR1.OC2M_3:24:1, TIM1.CCMR2.OC3M_3:16:1, TIM1.CCMR2.OC4M_3:24:1, TIM2.CCMR1.OC1M_3:16:1, TIM2.CCMR1.OC2M_3:24:1, TIM2.CCMR2.OC3M_3:16:1, TIM2.CCMR2.OC4M_3:24:1, TIM3.CCMR1.OC1M_3:16:1, TIM3.CCMR1.OC2M_3:24:1, TIM3.CCMR2.OC3M_3:16:1, TIM3.CCMR2.OC4M_3:24:1, TIM16.CCMR1.OC1M_3:16:1; reset values corrected from the reference manual: USART1.ISR=0x008000C0, UART4.ISR=0x008000C0, LPUART1.ISR=0x008000C0, FLASH.OPTR=0xFFEFF8AA, RCC.CR=0x00000500, DBGMCU.IDCODE=0x20016469, EXTI.IMR1=0x1F840000, EXTI.IMR2=0x00000C3C; interrupts reassigned from the reference manual: TAMP=RTC_TAMP_CSS_LSE; PWR=PVD_PVM; EXTI=EXTI0,EXTI1,EXTI2,EXTI3,EXTI4,EXTI9_5,EXTI15_10; HRTIM_TIME=HRTIM_TIME_IRQn; HRTIM_TIMF=HRTIM_TIMF_IRQn; TIM15=TIM1_BRK_TIM15; TIM16=TIM1_UP_TIM16; TIM17=TIM1_TRG_COM; ADC2=ADC1_2; DAC1=TIM6_DACUNDER; DAC3=TIM6_DACUNDER; DAC2=TIM7; DAC4=TIM7", + "interrupts": { + "WWDG": 0, + "PVD_PVM": 1, + "RTC_TAMP_CSS_LSE": 2, + "RTC_WKUP": 3, + "FLASH": 4, + "RCC": 5, + "EXTI0": 6, + "EXTI1": 7, + "EXTI2": 8, + "EXTI3": 9, + "EXTI4": 10, + "DMA1_CH1": 11, + "DMA1_CH2": 12, + "DMA1_CH3": 13, + "DMA1_CH4": 14, + "DMA1_CH5": 15, + "DMA1_CH6": 16, + "DMA1_CH7": 17, + "ADC1_2": 18, + "USB_HP": 19, + "USB_LP": 20, + "FDCAN1_IT0": 21, + "FDCAN1_IT1": 22, + "EXTI9_5": 23, + "TIM1_BRK_TIM15": 24, + "TIM1_UP_TIM16": 25, + "TIM1_TRG_COM": 26, + "TIM1_CC": 27, + "TIM2": 28, + "TIM3": 29, + "TIM4": 30, + "I2C1_EV": 31, + "I2C1_ER": 32, + "I2C2_EV": 33, + "I2C2_ER": 34, + "SPI1": 35, + "SPI2": 36, + "USART1": 37, + "USART2": 38, + "USART3": 39, + "EXTI15_10": 40, + "RTC_ALARM": 41, + "USBWakeUP": 42, + "TIM8_BRK": 43, + "TIM8_UP": 44, + "TIM8_TRG_COM": 45, + "TIM8_CC": 46, + "ADC3": 47, + "FMC": 48, + "LPTIM1": 49, + "TIM5": 50, + "SPI3": 51, + "UART4": 52, + "UART5": 53, + "TIM6_DACUNDER": 54, + "TIM7": 55, + "DMA2_CH1": 56, + "DMA2_CH2": 57, + "DMA2_CH3": 58, + "DMA2_CH4": 59, + "DMA2_CH5": 60, + "ADC4": 61, + "ADC5": 62, + "UCPD1": 63, + "COMP1_2_3": 64, + "COMP4_5_6": 65, + "COMP7": 66, + "HRTIM_Master_IRQn": 67, + "HRTIM_TIMA_IRQn": 68, + "HRTIM_TIMB_IRQn": 69, + "HRTIM_TIMC_IRQn": 70, + "HRTIM_TIMD_IRQn": 71, + "HRTIM_TIME_IRQn": 72, + "HRTIM_TIM_FLT_IRQn": 73, + "HRTIM_TIMF_IRQn": 74, + "CRS": 75, + "SAI": 76, + "TIM20_BRK": 77, + "TIM20_UP": 78, + "TIM20_TRG_COM": 79, + "TIM20_CC": 80, + "FPU": 81, + "I2C4_EV": 82, + "I2C4_ER": 83, + "SPI4": 84, + "FDCAN2_IT0": 86, + "FDCAN2_IT1": 87, + "FDCAN3_IT0": 88, + "FDCAN3_IT1": 89, + "RNG": 90, + "LPUART": 91, + "I2C3_EV": 92, + "I2C3_ER": 93, + "DMAMUX_OVR": 94, + "QUADSPI": 95, + "DMA1_CH8": 96, + "DMA2_CH6": 97, + "DMA2_CH7": 98, + "DMA2_CH8": 99, + "Cordic": 100, + "FMAC": 101 + }, + "peripherals": [ + { + "name": "TIM2", + "base": "0x40000000", + "interrupts": [ + "TIM2" + ], + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "size": 16, + "fields": [ + [ + "CEN", + 0, + 1 + ], + [ + "UDIS", + 1, + 1 + ], + [ + "URS", + 2, + 1 + ], + [ + "OPM", + 3, + 1 + ], + [ + "DIR", + 4, + 1 + ], + [ + "CMS", + 5, + 2 + ], + [ + "ARPE", + 7, + 1 + ], + [ + "CKD", + 8, + 2 + ], + [ + "UIFREMAP", + 11, + 1 + ], + [ + "DITHEN", + 12, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "fields": [ + [ + "CCDS", + 3, + 1 + ], + [ + "MMS", + 4, + 3 + ], + [ + "TI1S", + 7, + 1 + ], + [ + "MMS_1", + 25, + 1 + ] + ] + }, + { + "name": "SMCR", + "offset": "0x08", + "fields": [ + [ + "SMS", + 0, + 3 + ], + [ + "OCCS", + 3, + 1 + ], + [ + "TS", + 4, + 3 + ], + [ + "MSM", + 7, + 1 + ], + [ + "ETF", + 8, + 4 + ], + [ + "ETPS", + 12, + 2 + ], + [ + "ECE", + 14, + 1 + ], + [ + "ETP", + 15, + 1 + ], + [ + "SMS_1", + 16, + 1 + ], + [ + "TS_1", + 20, + 2 + ], + [ + "SMSPE", + 24, + 1 + ], + [ + "SMSPS", + 25, + 1 + ] + ] + }, + { + "name": "DIER", + "offset": "0x0C", + "fields": [ + [ + "UIE", + 0, + 1 + ], + [ + "CC1IE", + 1, + 1 + ], + [ + "CC2IE", + 2, + 1 + ], + [ + "CC3IE", + 3, + 1 + ], + [ + "CC4IE", + 4, + 1 + ], + [ + "TIE", + 6, + 1 + ], + [ + "UDE", + 8, + 1 + ], + [ + "CC1DE", + 9, + 1 + ], + [ + "CC2DE", + 10, + 1 + ], + [ + "CC3DE", + 11, + 1 + ], + [ + "CC4DE", + 12, + 1 + ], + [ + "TDE", + 14, + 1 + ], + [ + "IDXIE", + 20, + 1 + ], + [ + "DIRIE", + 21, + 1 + ], + [ + "IERRIE", + 22, + 1 + ], + [ + "TERRIE", + 23, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x10", + "fields": [ + [ + "UIF", + 0, + 1 + ], + [ + "CC1IF", + 1, + 1 + ], + [ + "CC2IF", + 2, + 1 + ], + [ + "CC3IF", + 3, + 1 + ], + [ + "CC4IF", + 4, + 1 + ], + [ + "TIF", + 6, + 1 + ], + [ + "CC1OF", + 9, + 1 + ], + [ + "CC2OF", + 10, + 1 + ], + [ + "CC3OF", + 11, + 1 + ], + [ + "CC4OF", + 12, + 1 + ], + [ + "IDXF", + 20, + 1 + ], + [ + "DIRF", + 21, + 1 + ], + [ + "IERRF", + 22, + 1 + ], + [ + "TERRF", + 23, + 1 + ] + ] + }, + { + "name": "EGR", + "offset": "0x14", + "size": 16, + "fields": [ + [ + "UG", + 0, + 1, + "w" + ], + [ + "CC1G", + 1, + 1, + "w" + ], + [ + "CC2G", + 2, + 1, + "w" + ], + [ + "CC3G", + 3, + 1, + "w" + ], + [ + "CC4G", + 4, + 1, + "w" + ], + [ + "TG", + 6, + 1, + "w" + ] + ] + }, + { + "name": "CCMR1", + "offset": "0x18", + "fields": [ + [ + "OC2M_3", + 24, + 1 + ], + [ + "OC1M_3", + 16, + 1 + ], + [ + "IC2F", + 12, + 4 + ], + [ + "IC2PSC", + 10, + 2 + ], + [ + "CC2S", + 8, + 2 + ], + [ + "IC1F", + 4, + 4 + ], + [ + "IC1PSC", + 2, + 2 + ], + [ + "CC1S", + 0, + 2 + ] + ] + }, + { + "name": "CCMR2", + "offset": "0x1C", + "fields": [ + [ + "OC4M_3", + 24, + 1 + ], + [ + "OC3M_3", + 16, + 1 + ], + [ + "IC4F", + 12, + 4 + ], + [ + "IC4PSC", + 10, + 2 + ], + [ + "CC4S", + 8, + 2 + ], + [ + "IC3F", + 4, + 4 + ], + [ + "IC3PSC", + 2, + 2 + ], + [ + "CC3S", + 0, + 2 + ] + ] + }, + { + "name": "CCER", + "offset": "0x20", + "size": 16, + "fields": [ + [ + "CC1E", + 0, + 1 + ], + [ + "CC1P", + 1, + 1 + ], + [ + "CC1NP", + 3, + 1 + ], + [ + "CC2E", + 4, + 1 + ], + [ + "CC2P", + 5, + 1 + ], + [ + "CC2NP", + 7, + 1 + ], + [ + "CC3E", + 8, + 1 + ], + [ + "CC3P", + 9, + 1 + ], + [ + "CC3NP", + 11, + 1 + ], + [ + "CC4E", + 12, + 1 + ], + [ + "CC4P", + 13, + 1 + ], + [ + "CC4NP", + 15, + 1 + ] + ] + }, + { + "name": "CNT", + "offset": "0x24", + "fields": [ + [ + "CNT", + 0, + 32 + ] + ] + }, + { + "name": "PSC", + "offset": "0x28", + "size": 16, + "fields": [ + [ + "PSC", + 0, + 16 + ] + ] + }, + { + "name": "ARR", + "offset": "0x2C", + "reset": "0xFFFFFFFF", + "fields": [ + [ + "ARR", + 0, + 32 + ] + ] + }, + { + "name": "CCR1", + "offset": "0x34", + "fields": [ + [ + "CCR1", + 0, + 32 + ] + ] + }, + { + "name": "CCR2", + "offset": "0x38", + "fields": [ + [ + "CCR2", + 0, + 32 + ] + ] + }, + { + "name": "CCR3", + "offset": "0x3C", + "fields": [ + [ + "CCR3", + 0, + 32 + ] + ] + }, + { + "name": "CCR4", + "offset": "0x40", + "fields": [ + [ + "CCR4", + 0, + 32 + ] + ] + }, + { + "name": "ECR", + "offset": "0x58", + "fields": [ + [ + "IE", + 0, + 1 + ], + [ + "IDIR", + 1, + 2 + ], + [ + "FIDX", + 5, + 1 + ], + [ + "IPOS", + 6, + 2 + ], + [ + "PW", + 16, + 8 + ], + [ + "PWPRSC", + 24, + 3 + ] + ] + }, + { + "name": "TISEL", + "offset": "0x5C", + "fields": [ + [ + "TI1SEL", + 0, + 4 + ], + [ + "TI2SEL", + 8, + 4 + ], + [ + "TI3SEL", + 16, + 4 + ], + [ + "TI4SEL", + 24, + 4 + ] + ] + }, + { + "name": "AF1", + "offset": "0x60", + "fields": [ + [ + "ETRSEL", + 14, + 4 + ] + ] + }, + { + "name": "AF2", + "offset": "0x64", + "fields": [ + [ + "OCRSEL", + 16, + 3 + ] + ] + }, + { + "name": "DCR", + "offset": "0x3DC", + "fields": [ + [ + "DBA", + 0, + 5 + ], + [ + "DBL", + 8, + 5 + ] + ] + }, + { + "name": "DMAR", + "offset": "0x3E0", + "fields": [ + [ + "DMAB", + 0, + 32 + ] + ] + } + ] + }, + { + "name": "TIM3", + "base": "0x40000400", + "interrupts": [ + "TIM3" + ], + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "size": 16, + "fields": [ + [ + "CEN", + 0, + 1 + ], + [ + "UDIS", + 1, + 1 + ], + [ + "URS", + 2, + 1 + ], + [ + "OPM", + 3, + 1 + ], + [ + "DIR", + 4, + 1 + ], + [ + "CMS", + 5, + 2 + ], + [ + "ARPE", + 7, + 1 + ], + [ + "CKD", + 8, + 2 + ], + [ + "UIFREMAP", + 11, + 1 + ], + [ + "DITHEN", + 12, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "fields": [ + [ + "CCDS", + 3, + 1 + ], + [ + "MMS", + 4, + 3 + ], + [ + "TI1S", + 7, + 1 + ], + [ + "MMS_1", + 25, + 1 + ] + ] + }, + { + "name": "SMCR", + "offset": "0x08", + "fields": [ + [ + "SMS", + 0, + 3 + ], + [ + "OCCS", + 3, + 1 + ], + [ + "TS", + 4, + 3 + ], + [ + "MSM", + 7, + 1 + ], + [ + "ETF", + 8, + 4 + ], + [ + "ETPS", + 12, + 2 + ], + [ + "ECE", + 14, + 1 + ], + [ + "ETP", + 15, + 1 + ], + [ + "SMS_1", + 16, + 1 + ], + [ + "TS_1", + 20, + 2 + ], + [ + "SMSPE", + 24, + 1 + ], + [ + "SMSPS", + 25, + 1 + ] + ] + }, + { + "name": "DIER", + "offset": "0x0C", + "fields": [ + [ + "UIE", + 0, + 1 + ], + [ + "CC1IE", + 1, + 1 + ], + [ + "CC2IE", + 2, + 1 + ], + [ + "CC3IE", + 3, + 1 + ], + [ + "CC4IE", + 4, + 1 + ], + [ + "TIE", + 6, + 1 + ], + [ + "UDE", + 8, + 1 + ], + [ + "CC1DE", + 9, + 1 + ], + [ + "CC2DE", + 10, + 1 + ], + [ + "CC3DE", + 11, + 1 + ], + [ + "CC4DE", + 12, + 1 + ], + [ + "TDE", + 14, + 1 + ], + [ + "IDXIE", + 20, + 1 + ], + [ + "DIRIE", + 21, + 1 + ], + [ + "IERRIE", + 22, + 1 + ], + [ + "TERRIE", + 23, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x10", + "fields": [ + [ + "UIF", + 0, + 1 + ], + [ + "CC1IF", + 1, + 1 + ], + [ + "CC2IF", + 2, + 1 + ], + [ + "CC3IF", + 3, + 1 + ], + [ + "CC4IF", + 4, + 1 + ], + [ + "TIF", + 6, + 1 + ], + [ + "CC1OF", + 9, + 1 + ], + [ + "CC2OF", + 10, + 1 + ], + [ + "CC3OF", + 11, + 1 + ], + [ + "CC4OF", + 12, + 1 + ], + [ + "IDXF", + 20, + 1 + ], + [ + "DIRF", + 21, + 1 + ], + [ + "IERRF", + 22, + 1 + ], + [ + "TERRF", + 23, + 1 + ] + ] + }, + { + "name": "EGR", + "offset": "0x14", + "size": 16, + "fields": [ + [ + "UG", + 0, + 1, + "w" + ], + [ + "CC1G", + 1, + 1, + "w" + ], + [ + "CC2G", + 2, + 1, + "w" + ], + [ + "CC3G", + 3, + 1, + "w" + ], + [ + "CC4G", + 4, + 1, + "w" + ], + [ + "TG", + 6, + 1, + "w" + ] + ] + }, + { + "name": "CCMR1", + "offset": "0x18", + "fields": [ + [ + "OC2M_3", + 24, + 1 + ], + [ + "OC1M_3", + 16, + 1 + ], + [ + "IC2F", + 12, + 4 + ], + [ + "IC2PSC", + 10, + 2 + ], + [ + "CC2S", + 8, + 2 + ], + [ + "IC1F", + 4, + 4 + ], + [ + "IC1PSC", + 2, + 2 + ], + [ + "CC1S", + 0, + 2 + ] + ] + }, + { + "name": "CCMR2", + "offset": "0x1C", + "fields": [ + [ + "OC4M_3", + 24, + 1 + ], + [ + "OC3M_3", + 16, + 1 + ], + [ + "IC4F", + 12, + 4 + ], + [ + "IC4PSC", + 10, + 2 + ], + [ + "CC4S", + 8, + 2 + ], + [ + "IC3F", + 4, + 4 + ], + [ + "IC3PSC", + 2, + 2 + ], + [ + "CC3S", + 0, + 2 + ] + ] + }, + { + "name": "CCER", + "offset": "0x20", + "size": 16, + "fields": [ + [ + "CC1E", + 0, + 1 + ], + [ + "CC1P", + 1, + 1 + ], + [ + "CC1NP", + 3, + 1 + ], + [ + "CC2E", + 4, + 1 + ], + [ + "CC2P", + 5, + 1 + ], + [ + "CC2NP", + 7, + 1 + ], + [ + "CC3E", + 8, + 1 + ], + [ + "CC3P", + 9, + 1 + ], + [ + "CC3NP", + 11, + 1 + ], + [ + "CC4E", + 12, + 1 + ], + [ + "CC4P", + 13, + 1 + ], + [ + "CC4NP", + 15, + 1 + ] + ] + }, + { + "name": "CNT", + "offset": "0x24", + "fields": [ + [ + "CNT", + 0, + 16 + ], + [ + "UIFCPY", + 31, + 1 + ] + ] + }, + { + "name": "PSC", + "offset": "0x28", + "size": 16, + "fields": [ + [ + "PSC", + 0, + 16 + ] + ] + }, + { + "name": "ARR", + "offset": "0x2C", + "reset": "0x0000FFFF", + "fields": [ + [ + "ARR", + 0, + 20 + ] + ] + }, + { + "name": "CCR1", + "offset": "0x34", + "fields": [ + [ + "CCR1", + 0, + 20 + ] + ] + }, + { + "name": "CCR2", + "offset": "0x38", + "fields": [ + [ + "CCR2", + 0, + 20 + ] + ] + }, + { + "name": "CCR3", + "offset": "0x3C", + "fields": [ + [ + "CCR3", + 0, + 20 + ] + ] + }, + { + "name": "CCR4", + "offset": "0x40", + "fields": [ + [ + "CCR4", + 0, + 20 + ] + ] + }, + { + "name": "ECR", + "offset": "0x58", + "fields": [ + [ + "IE", + 0, + 1 + ], + [ + "IDIR", + 1, + 2 + ], + [ + "FIDX", + 5, + 1 + ], + [ + "IPOS", + 6, + 2 + ], + [ + "PW", + 16, + 8 + ], + [ + "PWPRSC", + 24, + 3 + ] + ] + }, + { + "name": "TISEL", + "offset": "0x5C", + "fields": [ + [ + "TI1SEL", + 0, + 4 + ], + [ + "TI2SEL", + 8, + 4 + ], + [ + "TI3SEL", + 16, + 4 + ], + [ + "TI4SEL", + 24, + 4 + ] + ] + }, + { + "name": "AF1", + "offset": "0x60", + "fields": [ + [ + "ETRSEL", + 14, + 4 + ] + ] + }, + { + "name": "AF2", + "offset": "0x64", + "fields": [ + [ + "OCRSEL", + 16, + 3 + ] + ] + }, + { + "name": "DCR", + "offset": "0x3DC", + "fields": [ + [ + "DBA", + 0, + 5 + ], + [ + "DBL", + 8, + 5 + ] + ] + }, + { + "name": "DMAR", + "offset": "0x3E0", + "fields": [ + [ + "DMAB", + 0, + 32 + ] + ] + } + ] + }, + { + "name": "TIM4", + "base": "0x40000800", + "interrupts": [ + "TIM4" + ], + "derived_from": "TIM3" + }, + { + "name": "TIM5", + "base": "0x40000C00", + "interrupts": [ + "TIM5" + ], + "derived_from": "TIM2" + }, + { + "name": "TIM6", + "base": "0x40001000", + "interrupts": [ + "TIM6_DACUNDER" + ], + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "size": 16, + "fields": [ + [ + "CEN", + 0, + 1 + ], + [ + "UDIS", + 1, + 1 + ], + [ + "URS", + 2, + 1 + ], + [ + "OPM", + 3, + 1 + ], + [ + "ARPE", + 7, + 1 + ], + [ + "UIFREMAP", + 11, + 1 + ], + [ + "DITHEN", + 12, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "size": 16, + "fields": [ + [ + "MMS", + 4, + 3 + ] + ] + }, + { + "name": "DIER", + "offset": "0x0C", + "size": 16, + "fields": [ + [ + "UIE", + 0, + 1 + ], + [ + "UDE", + 8, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x10", + "size": 16, + "fields": [ + [ + "UIF", + 0, + 1 + ] + ] + }, + { + "name": "EGR", + "offset": "0x14", + "size": 16, + "fields": [ + [ + "UG", + 0, + 1, + "w" + ] + ] + }, + { + "name": "CNT", + "offset": "0x24", + "fields": [ + [ + "CNT", + 0, + 16 + ], + [ + "UIFCPY", + 31, + 1, + "r" + ] + ] + }, + { + "name": "PSC", + "offset": "0x28", + "size": 16, + "fields": [ + [ + "PSC", + 0, + 16 + ] + ] + }, + { + "name": "ARR", + "offset": "0x2C", + "reset": "0x0000FFFF", + "fields": [ + [ + "ARR", + 0, + 20 + ] + ] + } + ] + }, + { + "name": "TIM7", + "base": "0x40001400", + "interrupts": [ + "TIM7" + ], + "derived_from": "TIM6" + }, + { + "name": "CRS", + "base": "0x40002000", + "interrupts": [ + "CRS" + ], + "registers": [ + { + "name": "CR", + "offset": "0x00", + "reset": "0x00004000", + "fields": [ + [ + "SYNCOKIE", + 0, + 1 + ], + [ + "SYNCWARNIE", + 1, + 1 + ], + [ + "ERRIE", + 2, + 1 + ], + [ + "ESYNCIE", + 3, + 1 + ], + [ + "CEN", + 5, + 1 + ], + [ + "AUTOTRIMEN", + 6, + 1 + ], + [ + "SWSYNC", + 7, + 1 + ], + [ + "TRIM", + 8, + 7 + ] + ] + }, + { + "name": "CFGR", + "offset": "0x04", + "reset": "0x2022BB7F", + "fields": [ + [ + "RELOAD", + 0, + 16 + ], + [ + "FELIM", + 16, + 8 + ], + [ + "SYNCDIV", + 24, + 3 + ], + [ + "SYNCSRC", + 28, + 2 + ], + [ + "SYNCPOL", + 31, + 1 + ] + ] + }, + { + "name": "ISR", + "offset": "0x08", + "fields": [ + [ + "SYNCOKF", + 0, + 1, + "r" + ], + [ + "SYNCWARNF", + 1, + 1, + "r" + ], + [ + "ERRF", + 2, + 1, + "r" + ], + [ + "ESYNCF", + 3, + 1, + "r" + ], + [ + "SYNCERR", + 8, + 1, + "r" + ], + [ + "SYNCMISS", + 9, + 1, + "r" + ], + [ + "TRIMOVF", + 10, + 1, + "r" + ], + [ + "FEDIR", + 15, + 1, + "r" + ], + [ + "FECAP", + 16, + 16, + "r" + ] + ] + }, + { + "name": "ICR", + "offset": "0x0C", + "fields": [ + [ + "SYNCOKC", + 0, + 1 + ], + [ + "SYNCWARNC", + 1, + 1 + ], + [ + "ERRC", + 2, + 1 + ], + [ + "ESYNCC", + 3, + 1 + ] + ] + } + ] + }, + { + "name": "TAMP", + "base": "0x40002400", + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "reset": "0xFFFF0000", + "fields": [ + [ + "TAMP1E", + 0, + 1 + ], + [ + "TAMP2E", + 1, + 1 + ], + [ + "TAMP3E", + 2, + 1 + ], + [ + "ITAMP3E", + 18, + 1 + ], + [ + "ITAMP4E", + 19, + 1 + ], + [ + "ITAMP5E", + 20, + 1 + ], + [ + "ITAMP6E", + 21, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "fields": [ + [ + "TAMP1NOER", + 0, + 1 + ], + [ + "TAMP2NOER", + 1, + 1 + ], + [ + "TAMP3NOER", + 2, + 1 + ], + [ + "TAMP1MSK", + 16, + 1 + ], + [ + "TAMP2MSK", + 17, + 1 + ], + [ + "TAMP3MSK", + 18, + 1 + ], + [ + "TAMP1TRG", + 24, + 1 + ], + [ + "TAMP2TRG", + 25, + 1 + ], + [ + "TAMP3TRG", + 26, + 1 + ] + ] + }, + { + "name": "FLTCR", + "offset": "0x0C", + "fields": [ + [ + "TAMPFREQ", + 0, + 3 + ], + [ + "TAMPFLT", + 3, + 2 + ], + [ + "TAMPPRCH", + 5, + 2 + ], + [ + "TAMPPUDIS", + 7, + 1 + ] + ] + }, + { + "name": "IER", + "offset": "0x2C", + "fields": [ + [ + "TAMP1IE", + 0, + 1 + ], + [ + "TAMP2IE", + 1, + 1 + ], + [ + "TAMP3IE", + 2, + 1 + ], + [ + "ITAMP3IE", + 18, + 1 + ], + [ + "ITAMP4IE", + 19, + 1 + ], + [ + "ITAMP5IE", + 20, + 1 + ], + [ + "ITAMP6IE", + 21, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x30", + "fields": [ + [ + "TAMP1F", + 0, + 1, + "r" + ], + [ + "TAMP2F", + 1, + 1, + "r" + ], + [ + "TAMP3F", + 2, + 1, + "r" + ], + [ + "ITAMP3F", + 18, + 1, + "r" + ], + [ + "ITAMP4F", + 19, + 1, + "r" + ], + [ + "ITAMP5F", + 20, + 1, + "r" + ], + [ + "ITAMP6F", + 21, + 1, + "r" + ] + ] + }, + { + "name": "MISR", + "offset": "0x34", + "fields": [ + [ + "TAMP1MF", + 0, + 1, + "r" + ], + [ + "TAMP2MF", + 1, + 1, + "r" + ], + [ + "TAMP3MF", + 2, + 1, + "r" + ], + [ + "ITAMP3MF", + 18, + 1, + "r" + ], + [ + "ITAMP4MF", + 19, + 1, + "r" + ], + [ + "ITAMP5MF", + 20, + 1, + "r" + ], + [ + "ITAMP6MF", + 21, + 1, + "r" + ] + ] + }, + { + "name": "SCR", + "offset": "0x3C", + "fields": [ + [ + "CTAMP1F", + 0, + 1 + ], + [ + "CTAMP2F", + 1, + 1 + ], + [ + "CTAMP3F", + 2, + 1 + ], + [ + "CITAMP3F", + 18, + 1 + ], + [ + "CITAMP4F", + 19, + 1 + ], + [ + "CITAMP5F", + 20, + 1 + ], + [ + "CITAMP6F", + 21, + 1 + ] + ] + }, + { + "name": "BKP0R", + "offset": "0x100", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP1R", + "offset": "0x104", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP2R", + "offset": "0x108", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP3R", + "offset": "0x10C", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP4R", + "offset": "0x110", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP5R", + "offset": "0x114", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP6R", + "offset": "0x118", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP7R", + "offset": "0x11C", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP8R", + "offset": "0x120", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP9R", + "offset": "0x124", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP10R", + "offset": "0x128", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP11R", + "offset": "0x12C", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP12R", + "offset": "0x130", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP13R", + "offset": "0x134", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP14R", + "offset": "0x138", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP15R", + "offset": "0x13C", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP16R", + "offset": "0x140", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP17R", + "offset": "0x144", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP18R", + "offset": "0x148", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP19R", + "offset": "0x14C", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP20R", + "offset": "0x150", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP21R", + "offset": "0x154", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP22R", + "offset": "0x158", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP23R", + "offset": "0x15C", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP24R", + "offset": "0x160", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP25R", + "offset": "0x164", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP26R", + "offset": "0x168", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP27R", + "offset": "0x16C", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP28R", + "offset": "0x170", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP29R", + "offset": "0x174", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP30R", + "offset": "0x178", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + }, + { + "name": "BKP31R", + "offset": "0x17C", + "fields": [ + [ + "BKP", + 0, + 32 + ] + ] + } + ], + "interrupts": [ + "RTC_TAMP_CSS_LSE" + ] + }, + { + "name": "RTC", + "base": "0x40002800", + "interrupts": [ + "RTC_TAMP_CSS_LSE", + "RTC_WKUP", + "RTC_ALARM" + ], + "registers": [ + { + "name": "TR", + "offset": "0x00", + "fields": [ + [ + "PM", + 22, + 1 + ], + [ + "HT", + 20, + 2 + ], + [ + "HU", + 16, + 4 + ], + [ + "MNT", + 12, + 3 + ], + [ + "MNU", + 8, + 4 + ], + [ + "ST", + 4, + 3 + ], + [ + "SU", + 0, + 4 + ] + ] + }, + { + "name": "DR", + "offset": "0x04", + "reset": "0x00002101", + "fields": [ + [ + "YT", + 20, + 4 + ], + [ + "YU", + 16, + 4 + ], + [ + "WDU", + 13, + 3 + ], + [ + "MT", + 12, + 1 + ], + [ + "MU", + 8, + 4 + ], + [ + "DT", + 4, + 2 + ], + [ + "DU", + 0, + 4 + ] + ] + }, + { + "name": "SSR", + "offset": "0x08", + "fields": [ + [ + "SS", + 0, + 16, + "r" + ] + ] + }, + { + "name": "ICSR", + "offset": "0x0C", + "reset": "0x00000007", + "fields": [ + [ + "ALRAWF", + 0, + 1, + "r" + ], + [ + "ALRBWF", + 1, + 1, + "r" + ], + [ + "WUTWF", + 2, + 1, + "r" + ], + [ + "SHPF", + 3, + 1 + ], + [ + "INITS", + 4, + 1, + "r" + ], + [ + "RSF", + 5, + 1 + ], + [ + "INITF", + 6, + 1, + "r" + ], + [ + "INIT", + 7, + 1 + ], + [ + "RECALPF", + 16, + 1, + "r" + ] + ] + }, + { + "name": "PRER", + "offset": "0x10", + "reset": "0x007F00FF", + "fields": [ + [ + "PREDIV_A", + 16, + 7 + ], + [ + "PREDIV_S", + 0, + 15 + ] + ] + }, + { + "name": "WUTR", + "offset": "0x14", + "reset": "0x0000FFFF", + "fields": [ + [ + "WUT", + 0, + 16 + ] + ] + }, + { + "name": "CR", + "offset": "0x18", + "fields": [ + [ + "WCKSEL", + 0, + 3 + ], + [ + "TSEDGE", + 3, + 1 + ], + [ + "REFCKON", + 4, + 1 + ], + [ + "BYPSHAD", + 5, + 1 + ], + [ + "FMT", + 6, + 1 + ], + [ + "ALRAE", + 8, + 1 + ], + [ + "ALRBE", + 9, + 1 + ], + [ + "WUTE", + 10, + 1 + ], + [ + "TSE", + 11, + 1 + ], + [ + "ALRAIE", + 12, + 1 + ], + [ + "ALRBIE", + 13, + 1 + ], + [ + "WUTIE", + 14, + 1 + ], + [ + "TSIE", + 15, + 1 + ], + [ + "ADD1H", + 16, + 1 + ], + [ + "SUB1H", + 17, + 1 + ], + [ + "BKP", + 18, + 1 + ], + [ + "COSEL", + 19, + 1 + ], + [ + "POL", + 20, + 1 + ], + [ + "OSEL", + 21, + 2 + ], + [ + "COE", + 23, + 1 + ], + [ + "ITSE", + 24, + 1 + ], + [ + "TAMPTS", + 25, + 1 + ], + [ + "TAMPOE", + 26, + 1 + ], + [ + "TAMPALRM_PU", + 29, + 1 + ], + [ + "TAMPALRM_TYPE", + 30, + 1 + ], + [ + "OUT2EN", + 31, + 1 + ] + ] + }, + { + "name": "WPR", + "offset": "0x24", + "fields": [ + [ + "KEY", + 0, + 8, + "w" + ] + ] + }, + { + "name": "CALR", + "offset": "0x28", + "fields": [ + [ + "CALP", + 15, + 1 + ], + [ + "CALW8", + 14, + 1 + ], + [ + "CALW16", + 13, + 1 + ], + [ + "CALM", + 0, + 9 + ] + ] + }, + { + "name": "SHIFTR", + "offset": "0x2C", + "fields": [ + [ + "ADD1S", + 31, + 1, + "w" + ], + [ + "SUBFS", + 0, + 15, + "w" + ] + ] + }, + { + "name": "TSTR", + "offset": "0x30", + "fields": [ + [ + "SU", + 0, + 4, + "r" + ], + [ + "ST", + 4, + 3, + "r" + ], + [ + "MNU", + 8, + 4, + "r" + ], + [ + "MNT", + 12, + 3, + "r" + ], + [ + "HU", + 16, + 4, + "r" + ], + [ + "HT", + 20, + 2, + "r" + ], + [ + "PM", + 22, + 1, + "r" + ] + ] + }, + { + "name": "TSDR", + "offset": "0x34", + "fields": [ + [ + "WDU", + 13, + 3, + "r" + ], + [ + "MT", + 12, + 1, + "r" + ], + [ + "MU", + 8, + 4, + "r" + ], + [ + "DT", + 4, + 2, + "r" + ], + [ + "DU", + 0, + 4, + "r" + ] + ] + }, + { + "name": "TSSSR", + "offset": "0x38", + "fields": [ + [ + "SS", + 0, + 16, + "r" + ] + ] + }, + { + "name": "ALRMAR", + "offset": "0x40", + "fields": [ + [ + "MSK4", + 31, + 1 + ], + [ + "WDSEL", + 30, + 1 + ], + [ + "DT", + 28, + 2 + ], + [ + "DU", + 24, + 4 + ], + [ + "MSK3", + 23, + 1 + ], + [ + "PM", + 22, + 1 + ], + [ + "HT", + 20, + 2 + ], + [ + "HU", + 16, + 4 + ], + [ + "MSK2", + 15, + 1 + ], + [ + "MNT", + 12, + 3 + ], + [ + "MNU", + 8, + 4 + ], + [ + "MSK1", + 7, + 1 + ], + [ + "ST", + 4, + 3 + ], + [ + "SU", + 0, + 4 + ] + ] + }, + { + "name": "ALRMASSR", + "offset": "0x44", + "fields": [ + [ + "MASKSS", + 24, + 4 + ], + [ + "SS", + 0, + 15 + ] + ] + }, + { + "name": "ALRMBR", + "offset": "0x48", + "fields": [ + [ + "MSK4", + 31, + 1 + ], + [ + "WDSEL", + 30, + 1 + ], + [ + "DT", + 28, + 2 + ], + [ + "DU", + 24, + 4 + ], + [ + "MSK3", + 23, + 1 + ], + [ + "PM", + 22, + 1 + ], + [ + "HT", + 20, + 2 + ], + [ + "HU", + 16, + 4 + ], + [ + "MSK2", + 15, + 1 + ], + [ + "MNT", + 12, + 3 + ], + [ + "MNU", + 8, + 4 + ], + [ + "MSK1", + 7, + 1 + ], + [ + "ST", + 4, + 3 + ], + [ + "SU", + 0, + 4 + ] + ] + }, + { + "name": "ALRMBSSR", + "offset": "0x4C", + "fields": [ + [ + "MASKSS", + 24, + 4 + ], + [ + "SS", + 0, + 15 + ] + ] + }, + { + "name": "SR", + "offset": "0x50", + "fields": [ + [ + "ALRAF", + 0, + 1, + "r" + ], + [ + "ALRBF", + 1, + 1, + "r" + ], + [ + "WUTF", + 2, + 1, + "r" + ], + [ + "TSF", + 3, + 1, + "r" + ], + [ + "TSOVF", + 4, + 1, + "r" + ], + [ + "ITSF", + 5, + 1, + "r" + ] + ] + }, + { + "name": "MISR", + "offset": "0x54", + "fields": [ + [ + "ALRAMF", + 0, + 1, + "r" + ], + [ + "ALRBMF", + 1, + 1, + "r" + ], + [ + "WUTMF", + 2, + 1, + "r" + ], + [ + "TSMF", + 3, + 1, + "r" + ], + [ + "TSOVMF", + 4, + 1, + "r" + ], + [ + "ITSMF", + 5, + 1, + "r" + ] + ] + }, + { + "name": "SCR", + "offset": "0x5C", + "fields": [ + [ + "CALRAF", + 0, + 1, + "w" + ], + [ + "CALRBF", + 1, + 1, + "w" + ], + [ + "CWUTF", + 2, + 1, + "w" + ], + [ + "CTSF", + 3, + 1, + "w" + ], + [ + "CTSOVF", + 4, + 1, + "w" + ], + [ + "CITSF", + 5, + 1, + "w" + ] + ] + } + ] + }, + { + "name": "WWDG", + "base": "0x40002C00", + "interrupts": [ + "WWDG" + ], + "registers": [ + { + "name": "CR", + "offset": "0x00", + "reset": "0x0000007F", + "fields": [ + [ + "WDGA", + 7, + 1 + ], + [ + "T", + 0, + 7 + ] + ] + }, + { + "name": "CFR", + "offset": "0x04", + "reset": "0x0000007F", + "fields": [ + [ + "WDGTB", + 11, + 3 + ], + [ + "EWI", + 9, + 1 + ], + [ + "W", + 0, + 7 + ] + ] + }, + { + "name": "SR", + "offset": "0x08", + "fields": [ + [ + "EWIF", + 0, + 1 + ] + ] + } + ] + }, + { + "name": "IWDG", + "base": "0x40003000", + "registers": [ + { + "name": "KR", + "offset": "0x00", + "fields": [ + [ + "KEY", + 0, + 16, + "w" + ] + ] + }, + { + "name": "PR", + "offset": "0x04", + "fields": [ + [ + "PR", + 0, + 3 + ] + ] + }, + { + "name": "RLR", + "offset": "0x08", + "reset": "0x00000FFF", + "fields": [ + [ + "RL", + 0, + 12 + ] + ] + }, + { + "name": "SR", + "offset": "0x0C", + "fields": [ + [ + "WVU", + 2, + 1, + "r" + ], + [ + "RVU", + 1, + 1, + "r" + ], + [ + "PVU", + 0, + 1, + "r" + ] + ] + }, + { + "name": "WINR", + "offset": "0x10", + "reset": "0x00000FFF", + "fields": [ + [ + "WIN", + 0, + 12 + ] + ] + } + ] + }, + { + "name": "SPI2", + "base": "0x40003800", + "interrupts": [ + "SPI2" + ], + "derived_from": "SPI4" + }, + { + "name": "SPI3", + "base": "0x40003C00", + "interrupts": [ + "SPI3" + ], + "derived_from": "SPI4" + }, + { + "name": "USART2", + "base": "0x40004400", + "interrupts": [ + "USART2" + ], + "derived_from": "USART1" + }, + { + "name": "USART3", + "base": "0x40004800", + "interrupts": [ + "USART3" + ], + "derived_from": "USART1" + }, + { + "name": "UART4", + "base": "0x40004C00", + "interrupts": [ + "UART4" + ], + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "fields": [ + [ + "RXFFIE", + 31, + 1 + ], + [ + "TXFEIE", + 30, + 1 + ], + [ + "FIFOEN", + 29, + 1 + ], + [ + "M1", + 28, + 1 + ], + [ + "EOBIE", + 27, + 1 + ], + [ + "RTOIE", + 26, + 1 + ], + [ + "DEAT4", + 25, + 1 + ], + [ + "DEAT3", + 24, + 1 + ], + [ + "DEAT2", + 23, + 1 + ], + [ + "DEAT1", + 22, + 1 + ], + [ + "DEAT0", + 21, + 1 + ], + [ + "DEDT4", + 20, + 1 + ], + [ + "DEDT3", + 19, + 1 + ], + [ + "DEDT2", + 18, + 1 + ], + [ + "DEDT1", + 17, + 1 + ], + [ + "DEDT0", + 16, + 1 + ], + [ + "OVER8", + 15, + 1 + ], + [ + "CMIE", + 14, + 1 + ], + [ + "MME", + 13, + 1 + ], + [ + "M0", + 12, + 1 + ], + [ + "WAKE", + 11, + 1 + ], + [ + "PCE", + 10, + 1 + ], + [ + "PS", + 9, + 1 + ], + [ + "PEIE", + 8, + 1 + ], + [ + "TXEIE", + 7, + 1 + ], + [ + "TCIE", + 6, + 1 + ], + [ + "RXNEIE", + 5, + 1 + ], + [ + "IDLEIE", + 4, + 1 + ], + [ + "TE", + 3, + 1 + ], + [ + "RE", + 2, + 1 + ], + [ + "UESM", + 1, + 1 + ], + [ + "UE", + 0, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "fields": [ + [ + "ADD4_7", + 28, + 4 + ], + [ + "ADD0_3", + 24, + 4 + ], + [ + "RTOEN", + 23, + 1 + ], + [ + "ABRMOD1", + 22, + 1 + ], + [ + "ABRMOD0", + 21, + 1 + ], + [ + "ABREN", + 20, + 1 + ], + [ + "MSBFIRST", + 19, + 1 + ], + [ + "TAINV", + 18, + 1 + ], + [ + "TXINV", + 17, + 1 + ], + [ + "RXINV", + 16, + 1 + ], + [ + "SWAP", + 15, + 1 + ], + [ + "LINEN", + 14, + 1 + ], + [ + "STOP", + 12, + 2 + ], + [ + "CLKEN", + 11, + 1 + ], + [ + "CPOL", + 10, + 1 + ], + [ + "CPHA", + 9, + 1 + ], + [ + "LBCL", + 8, + 1 + ], + [ + "LBDIE", + 6, + 1 + ], + [ + "LBDL", + 5, + 1 + ], + [ + "ADDM7", + 4, + 1 + ], + [ + "DIS_NSS", + 3, + 1 + ], + [ + "SLVEN", + 0, + 1 + ] + ] + }, + { + "name": "CR3", + "offset": "0x08", + "fields": [ + [ + "TXFTCFG", + 29, + 3 + ], + [ + "RXFTIE", + 28, + 1 + ], + [ + "RXFTCFG", + 25, + 3 + ], + [ + "TCBGTIE", + 24, + 1 + ], + [ + "TXFTIE", + 23, + 1 + ], + [ + "WUFIE", + 22, + 1 + ], + [ + "WUS", + 20, + 2 + ], + [ + "SCARCNT", + 17, + 3 + ], + [ + "DEP", + 15, + 1 + ], + [ + "DEM", + 14, + 1 + ], + [ + "DDRE", + 13, + 1 + ], + [ + "OVRDIS", + 12, + 1 + ], + [ + "ONEBIT", + 11, + 1 + ], + [ + "CTSIE", + 10, + 1 + ], + [ + "CTSE", + 9, + 1 + ], + [ + "RTSE", + 8, + 1 + ], + [ + "DMAT", + 7, + 1 + ], + [ + "DMAR", + 6, + 1 + ], + [ + "SCEN", + 5, + 1 + ], + [ + "NACK", + 4, + 1 + ], + [ + "HDSEL", + 3, + 1 + ], + [ + "IRLP", + 2, + 1 + ], + [ + "IREN", + 1, + 1 + ], + [ + "EIE", + 0, + 1 + ] + ] + }, + { + "name": "BRR", + "offset": "0x0C", + "fields": [ + [ + "DIV_Mantissa", + 4, + 12 + ], + [ + "DIV_Fraction", + 0, + 4 + ] + ] + }, + { + "name": "GTPR", + "offset": "0x10", + "fields": [ + [ + "GT", + 8, + 8 + ], + [ + "PSC", + 0, + 8 + ] + ] + }, + { + "name": "RTOR", + "offset": "0x14", + "fields": [ + [ + "BLEN", + 24, + 8 + ], + [ + "RTO", + 0, + 24 + ] + ] + }, + { + "name": "RQR", + "offset": "0x18", + "fields": [ + [ + "TXFRQ", + 4, + 1, + "w" + ], + [ + "RXFRQ", + 3, + 1, + "w" + ], + [ + "MMRQ", + 2, + 1, + "w" + ], + [ + "SBKRQ", + 1, + 1, + "w" + ], + [ + "ABRRQ", + 0, + 1, + "w" + ] + ] + }, + { + "name": "ISR", + "offset": "0x1C", + "reset": "0x008000C0", + "fields": [ + [ + "TXFT", + 27, + 1, + "r" + ], + [ + "RXFT", + 26, + 1, + "r" + ], + [ + "TCBGT", + 25, + 1, + "r" + ], + [ + "RXFF", + 24, + 1, + "r" + ], + [ + "TXFE", + 23, + 1, + "r" + ], + [ + "REACK", + 22, + 1, + "r" + ], + [ + "TEACK", + 21, + 1, + "r" + ], + [ + "WUF", + 20, + 1, + "r" + ], + [ + "RWU", + 19, + 1, + "r" + ], + [ + "SBKF", + 18, + 1, + "r" + ], + [ + "CMF", + 17, + 1, + "r" + ], + [ + "BUSY", + 16, + 1, + "r" + ], + [ + "ABRF", + 15, + 1, + "r" + ], + [ + "ABRE", + 14, + 1, + "r" + ], + [ + "UDR", + 13, + 1, + "r" + ], + [ + "EOBF", + 12, + 1, + "r" + ], + [ + "RTOF", + 11, + 1, + "r" + ], + [ + "CTS", + 10, + 1, + "r" + ], + [ + "CTSIF", + 9, + 1, + "r" + ], + [ + "LBDF", + 8, + 1, + "r" + ], + [ + "TXE", + 7, + 1, + "r" + ], + [ + "TC", + 6, + 1, + "r" + ], + [ + "RXNE", + 5, + 1, + "r" + ], + [ + "IDLE", + 4, + 1, + "r" + ], + [ + "ORE", + 3, + 1, + "r" + ], + [ + "NF", + 2, + 1, + "r" + ], + [ + "FE", + 1, + 1, + "r" + ], + [ + "PE", + 0, + 1, + "r" + ] + ] + }, + { + "name": "ICR", + "offset": "0x20", + "fields": [ + [ + "WUCF", + 20, + 1, + "w" + ], + [ + "CMCF", + 17, + 1, + "w" + ], + [ + "UDRCF", + 13, + 1, + "w" + ], + [ + "EOBCF", + 12, + 1, + "w" + ], + [ + "RTOCF", + 11, + 1, + "w" + ], + [ + "CTSCF", + 9, + 1, + "w" + ], + [ + "LBDCF", + 8, + 1, + "w" + ], + [ + "TCBGTCF", + 7, + 1, + "w" + ], + [ + "TCCF", + 6, + 1, + "w" + ], + [ + "TXFECF", + 5, + 1, + "w" + ], + [ + "IDLECF", + 4, + 1, + "w" + ], + [ + "ORECF", + 3, + 1, + "w" + ], + [ + "NCF", + 2, + 1, + "w" + ], + [ + "FECF", + 1, + 1, + "w" + ], + [ + "PECF", + 0, + 1, + "w" + ] + ] + }, + { + "name": "RDR", + "offset": "0x24", + "fields": [ + [ + "RDR", + 0, + 9, + "r" + ] + ] + }, + { + "name": "TDR", + "offset": "0x28", + "fields": [ + [ + "TDR", + 0, + 9 + ] + ] + }, + { + "name": "PRESC", + "offset": "0x2C", + "fields": [ + [ + "PRESCALER", + 0, + 4 + ] + ] + } + ] + }, + { + "name": "UART5", + "base": "0x40005000", + "interrupts": [ + "UART5" + ], + "derived_from": "UART4" + }, + { + "name": "I2C1", + "base": "0x40005400", + "interrupts": [ + "I2C1_EV", + "I2C1_ER" + ], + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "fields": [ + [ + "PE", + 0, + 1 + ], + [ + "TXIE", + 1, + 1 + ], + [ + "RXIE", + 2, + 1 + ], + [ + "ADDRIE", + 3, + 1 + ], + [ + "NACKIE", + 4, + 1 + ], + [ + "STOPIE", + 5, + 1 + ], + [ + "TCIE", + 6, + 1 + ], + [ + "ERRIE", + 7, + 1 + ], + [ + "DNF", + 8, + 4 + ], + [ + "ANFOFF", + 12, + 1 + ], + [ + "TXDMAEN", + 14, + 1 + ], + [ + "RXDMAEN", + 15, + 1 + ], + [ + "SBC", + 16, + 1 + ], + [ + "NOSTRETCH", + 17, + 1 + ], + [ + "WUPEN", + 18, + 1 + ], + [ + "GCEN", + 19, + 1 + ], + [ + "SMBHEN", + 20, + 1 + ], + [ + "SMBDEN", + 21, + 1 + ], + [ + "ALERTEN", + 22, + 1 + ], + [ + "PECEN", + 23, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "fields": [ + [ + "PECBYTE", + 26, + 1 + ], + [ + "AUTOEND", + 25, + 1 + ], + [ + "RELOAD", + 24, + 1 + ], + [ + "NBYTES", + 16, + 8 + ], + [ + "NACK", + 15, + 1 + ], + [ + "STOP", + 14, + 1 + ], + [ + "START", + 13, + 1 + ], + [ + "HEAD10R", + 12, + 1 + ], + [ + "ADD10", + 11, + 1 + ], + [ + "RD_WRN", + 10, + 1 + ], + [ + "SADD", + 0, + 10 + ] + ] + }, + { + "name": "OAR1", + "offset": "0x08", + "fields": [ + [ + "OA1", + 0, + 10 + ], + [ + "OA1MODE", + 10, + 1 + ], + [ + "OA1EN", + 15, + 1 + ] + ] + }, + { + "name": "OAR2", + "offset": "0x0C", + "fields": [ + [ + "OA2", + 1, + 7 + ], + [ + "OA2MSK", + 8, + 3 + ], + [ + "OA2EN", + 15, + 1 + ] + ] + }, + { + "name": "TIMINGR", + "offset": "0x10", + "fields": [ + [ + "SCLL", + 0, + 8 + ], + [ + "SCLH", + 8, + 8 + ], + [ + "SDADEL", + 16, + 4 + ], + [ + "SCLDEL", + 20, + 4 + ], + [ + "PRESC", + 28, + 4 + ] + ] + }, + { + "name": "TIMEOUTR", + "offset": "0x14", + "fields": [ + [ + "TIMEOUTA", + 0, + 12 + ], + [ + "TIDLE", + 12, + 1 + ], + [ + "TIMOUTEN", + 15, + 1 + ], + [ + "TIMEOUTB", + 16, + 12 + ], + [ + "TEXTEN", + 31, + 1 + ] + ] + }, + { + "name": "ISR", + "offset": "0x18", + "reset": "0x00000001", + "fields": [ + [ + "ADDCODE", + 17, + 7, + "r" + ], + [ + "DIR", + 16, + 1, + "r" + ], + [ + "BUSY", + 15, + 1, + "r" + ], + [ + "ALERT", + 13, + 1, + "r" + ], + [ + "TIMEOUT", + 12, + 1, + "r" + ], + [ + "PECERR", + 11, + 1, + "r" + ], + [ + "OVR", + 10, + 1, + "r" + ], + [ + "ARLO", + 9, + 1, + "r" + ], + [ + "BERR", + 8, + 1, + "r" + ], + [ + "TCR", + 7, + 1, + "r" + ], + [ + "TC", + 6, + 1, + "r" + ], + [ + "STOPF", + 5, + 1, + "r" + ], + [ + "NACKF", + 4, + 1, + "r" + ], + [ + "ADDR", + 3, + 1, + "r" + ], + [ + "RXNE", + 2, + 1, + "r" + ], + [ + "TXIS", + 1, + 1 + ], + [ + "TXE", + 0, + 1 + ] + ] + }, + { + "name": "ICR", + "offset": "0x1C", + "fields": [ + [ + "ALERTCF", + 13, + 1, + "w" + ], + [ + "TIMOUTCF", + 12, + 1, + "w" + ], + [ + "PECCF", + 11, + 1, + "w" + ], + [ + "OVRCF", + 10, + 1, + "w" + ], + [ + "ARLOCF", + 9, + 1, + "w" + ], + [ + "BERRCF", + 8, + 1, + "w" + ], + [ + "STOPCF", + 5, + 1, + "w" + ], + [ + "NACKCF", + 4, + 1, + "w" + ], + [ + "ADDRCF", + 3, + 1, + "w" + ] + ] + }, + { + "name": "PECR", + "offset": "0x20", + "fields": [ + [ + "PEC", + 0, + 8, + "r" + ] + ] + }, + { + "name": "RXDR", + "offset": "0x24", + "fields": [ + [ + "RXDATA", + 0, + 8, + "r" + ] + ] + }, + { + "name": "TXDR", + "offset": "0x28", + "fields": [ + [ + "TXDATA", + 0, + 8 + ] + ] + } + ] + }, + { + "name": "I2C2", + "base": "0x40005800", + "interrupts": [ + "I2C2_EV", + "I2C2_ER" + ], + "derived_from": "I2C1" + }, + { + "name": "USB_FS_device", + "base": "0x40005C00", + "interrupts": [ + "USB_HP", + "USB_LP", + "USBWakeUP" + ], + "registers": [ + { + "name": "EP0R", + "offset": "0x00", + "fields": [ + [ + "EA", + 0, + 4 + ], + [ + "STAT_TX", + 4, + 2 + ], + [ + "DTOG_TX", + 6, + 1 + ], + [ + "CTR_TX", + 7, + 1 + ], + [ + "EP_KIND", + 8, + 1 + ], + [ + "EP_TYPE", + 9, + 2 + ], + [ + "SETUP", + 11, + 1 + ], + [ + "STAT_RX", + 12, + 2 + ], + [ + "DTOG_RX", + 14, + 1 + ], + [ + "CTR_RX", + 15, + 1 + ] + ] + }, + { + "name": "EP1R", + "offset": "0x04", + "fields": [ + [ + "EA", + 0, + 4 + ], + [ + "STAT_TX", + 4, + 2 + ], + [ + "DTOG_TX", + 6, + 1 + ], + [ + "CTR_TX", + 7, + 1 + ], + [ + "EP_KIND", + 8, + 1 + ], + [ + "EP_TYPE", + 9, + 2 + ], + [ + "SETUP", + 11, + 1 + ], + [ + "STAT_RX", + 12, + 2 + ], + [ + "DTOG_RX", + 14, + 1 + ], + [ + "CTR_RX", + 15, + 1 + ] + ] + }, + { + "name": "EP2R", + "offset": "0x08", + "fields": [ + [ + "EA", + 0, + 4 + ], + [ + "STAT_TX", + 4, + 2 + ], + [ + "DTOG_TX", + 6, + 1 + ], + [ + "CTR_TX", + 7, + 1 + ], + [ + "EP_KIND", + 8, + 1 + ], + [ + "EP_TYPE", + 9, + 2 + ], + [ + "SETUP", + 11, + 1 + ], + [ + "STAT_RX", + 12, + 2 + ], + [ + "DTOG_RX", + 14, + 1 + ], + [ + "CTR_RX", + 15, + 1 + ] + ] + }, + { + "name": "EP3R", + "offset": "0x0C", + "fields": [ + [ + "EA", + 0, + 4 + ], + [ + "STAT_TX", + 4, + 2 + ], + [ + "DTOG_TX", + 6, + 1 + ], + [ + "CTR_TX", + 7, + 1 + ], + [ + "EP_KIND", + 8, + 1 + ], + [ + "EP_TYPE", + 9, + 2 + ], + [ + "SETUP", + 11, + 1 + ], + [ + "STAT_RX", + 12, + 2 + ], + [ + "DTOG_RX", + 14, + 1 + ], + [ + "CTR_RX", + 15, + 1 + ] + ] + }, + { + "name": "EP4R", + "offset": "0x10", + "fields": [ + [ + "EA", + 0, + 4 + ], + [ + "STAT_TX", + 4, + 2 + ], + [ + "DTOG_TX", + 6, + 1 + ], + [ + "CTR_TX", + 7, + 1 + ], + [ + "EP_KIND", + 8, + 1 + ], + [ + "EP_TYPE", + 9, + 2 + ], + [ + "SETUP", + 11, + 1 + ], + [ + "STAT_RX", + 12, + 2 + ], + [ + "DTOG_RX", + 14, + 1 + ], + [ + "CTR_RX", + 15, + 1 + ] + ] + }, + { + "name": "EP5R", + "offset": "0x14", + "fields": [ + [ + "EA", + 0, + 4 + ], + [ + "STAT_TX", + 4, + 2 + ], + [ + "DTOG_TX", + 6, + 1 + ], + [ + "CTR_TX", + 7, + 1 + ], + [ + "EP_KIND", + 8, + 1 + ], + [ + "EP_TYPE", + 9, + 2 + ], + [ + "SETUP", + 11, + 1 + ], + [ + "STAT_RX", + 12, + 2 + ], + [ + "DTOG_RX", + 14, + 1 + ], + [ + "CTR_RX", + 15, + 1 + ] + ] + }, + { + "name": "EP6R", + "offset": "0x18", + "fields": [ + [ + "EA", + 0, + 4 + ], + [ + "STAT_TX", + 4, + 2 + ], + [ + "DTOG_TX", + 6, + 1 + ], + [ + "CTR_TX", + 7, + 1 + ], + [ + "EP_KIND", + 8, + 1 + ], + [ + "EP_TYPE", + 9, + 2 + ], + [ + "SETUP", + 11, + 1 + ], + [ + "STAT_RX", + 12, + 2 + ], + [ + "DTOG_RX", + 14, + 1 + ], + [ + "CTR_RX", + 15, + 1 + ] + ] + }, + { + "name": "EP7R", + "offset": "0x1C", + "fields": [ + [ + "EA", + 0, + 4 + ], + [ + "STAT_TX", + 4, + 2 + ], + [ + "DTOG_TX", + 6, + 1 + ], + [ + "CTR_TX", + 7, + 1 + ], + [ + "EP_KIND", + 8, + 1 + ], + [ + "EP_TYPE", + 9, + 2 + ], + [ + "SETUP", + 11, + 1 + ], + [ + "STAT_RX", + 12, + 2 + ], + [ + "DTOG_RX", + 14, + 1 + ], + [ + "CTR_RX", + 15, + 1 + ] + ] + }, + { + "name": "CNTR", + "offset": "0x40", + "fields": [ + [ + "FRES", + 0, + 1 + ], + [ + "PDWN", + 1, + 1 + ], + [ + "LP_MODE", + 2, + 1 + ], + [ + "FSUSP", + 3, + 1 + ], + [ + "RESUME", + 4, + 1 + ], + [ + "L1RESUME", + 5, + 1 + ], + [ + "L1REQM", + 7, + 1 + ], + [ + "ESOFM", + 8, + 1 + ], + [ + "SOFM", + 9, + 1 + ], + [ + "RESETM", + 10, + 1 + ], + [ + "SUSPM", + 11, + 1 + ], + [ + "WKUPM", + 12, + 1 + ], + [ + "ERRM", + 13, + 1 + ], + [ + "PMAOVRM", + 14, + 1 + ], + [ + "CTRM", + 15, + 1 + ] + ] + }, + { + "name": "ISTR", + "offset": "0x44", + "fields": [ + [ + "EP_ID", + 0, + 4 + ], + [ + "DIR", + 4, + 1 + ], + [ + "L1REQ", + 7, + 1 + ], + [ + "ESOF", + 8, + 1 + ], + [ + "SOF", + 9, + 1 + ], + [ + "RESET", + 10, + 1 + ], + [ + "SUSP", + 11, + 1 + ], + [ + "WKUP", + 12, + 1 + ], + [ + "ERR", + 13, + 1 + ], + [ + "PMAOVR", + 14, + 1 + ], + [ + "CTR", + 15, + 1 + ] + ] + }, + { + "name": "FNR", + "offset": "0x48", + "fields": [ + [ + "FN", + 0, + 11, + "r" + ], + [ + "LSOF", + 11, + 2, + "r" + ], + [ + "LCK", + 13, + 1, + "r" + ], + [ + "RXDM", + 14, + 1, + "r" + ], + [ + "RXDP", + 15, + 1, + "r" + ] + ] + }, + { + "name": "DADDR", + "offset": "0x4C", + "fields": [ + [ + "ADD", + 0, + 7 + ], + [ + "EF", + 7, + 1 + ] + ] + }, + { + "name": "BTABLE", + "offset": "0x50", + "fields": [ + [ + "BTABLE", + 3, + 13 + ] + ] + } + ] + }, + { + "name": "FDCAN1", + "base": "0x40006400", + "interrupts": [ + "FDCAN1_IT0", + "FDCAN1_IT1" + ], + "registers": [ + { + "name": "CREL", + "offset": "0x00", + "reset": "0x32141218", + "fields": [ + [ + "DAY", + 0, + 8, + "r" + ], + [ + "MON", + 8, + 8, + "r" + ], + [ + "YEAR", + 16, + 4, + "r" + ], + [ + "SUBSTEP", + 20, + 4, + "r" + ], + [ + "STEP", + 24, + 4, + "r" + ], + [ + "REL", + 28, + 4, + "r" + ] + ] + }, + { + "name": "ENDN", + "offset": "0x04", + "reset": "0x87654321", + "fields": [ + [ + "ETV", + 0, + 32, + "r" + ] + ] + }, + { + "name": "DBTP", + "offset": "0x0C", + "reset": "0x00000A33", + "fields": [ + [ + "DSJW", + 0, + 4 + ], + [ + "DTSEG2", + 4, + 4 + ], + [ + "DTSEG1", + 8, + 5 + ], + [ + "DBRP", + 16, + 5 + ], + [ + "TDC", + 23, + 1 + ] + ] + }, + { + "name": "TEST", + "offset": "0x10", + "fields": [ + [ + "LBCK", + 4, + 1 + ], + [ + "TX", + 5, + 2 + ], + [ + "RX", + 7, + 1, + "r" + ] + ] + }, + { + "name": "RWD", + "offset": "0x14", + "fields": [ + [ + "WDC", + 0, + 8 + ], + [ + "WDV", + 8, + 8, + "r" + ] + ] + }, + { + "name": "CCCR", + "offset": "0x18", + "reset": "0x00000001", + "fields": [ + [ + "INIT", + 0, + 1 + ], + [ + "CCE", + 1, + 1 + ], + [ + "ASM", + 2, + 1 + ], + [ + "CSA", + 3, + 1, + "r" + ], + [ + "CSR", + 4, + 1 + ], + [ + "MON", + 5, + 1 + ], + [ + "DAR", + 6, + 1 + ], + [ + "TEST", + 7, + 1 + ], + [ + "FDOE", + 8, + 1 + ], + [ + "BRSE", + 9, + 1 + ], + [ + "PXHD", + 12, + 1 + ], + [ + "EFBI", + 13, + 1 + ], + [ + "TXP", + 14, + 1 + ], + [ + "NISO", + 15, + 1 + ] + ] + }, + { + "name": "NBTP", + "offset": "0x1C", + "reset": "0x06000A03", + "fields": [ + [ + "NTSEG2", + 0, + 7 + ], + [ + "NTSEG1", + 8, + 8 + ], + [ + "NBRP", + 16, + 9 + ], + [ + "NSJW", + 25, + 7 + ] + ] + }, + { + "name": "TSCC", + "offset": "0x20", + "fields": [ + [ + "TSS", + 0, + 2 + ], + [ + "TCP", + 16, + 4 + ] + ] + }, + { + "name": "TSCV", + "offset": "0x24", + "fields": [ + [ + "TSC", + 0, + 16 + ] + ] + }, + { + "name": "TOCC", + "offset": "0x28", + "reset": "0xFFFF0000", + "fields": [ + [ + "ETOC", + 0, + 1 + ], + [ + "TOS", + 1, + 2 + ], + [ + "TOP", + 16, + 16 + ] + ] + }, + { + "name": "TOCV", + "offset": "0x2C", + "reset": "0x0000FFFF", + "fields": [ + [ + "TOC", + 0, + 16 + ] + ] + }, + { + "name": "ECR", + "offset": "0x40", + "fields": [ + [ + "TEC", + 0, + 8, + "r" + ], + [ + "REC", + 8, + 7, + "r" + ], + [ + "RP", + 15, + 1, + "r" + ], + [ + "CEL", + 16, + 8 + ] + ] + }, + { + "name": "PSR", + "offset": "0x44", + "reset": "0x00000707", + "fields": [ + [ + "LEC", + 0, + 3 + ], + [ + "ACT", + 3, + 2, + "r" + ], + [ + "EP", + 5, + 1, + "r" + ], + [ + "EW", + 6, + 1, + "r" + ], + [ + "BO", + 7, + 1, + "r" + ], + [ + "DLEC", + 8, + 3 + ], + [ + "RESI", + 11, + 1 + ], + [ + "RBRS", + 12, + 1 + ], + [ + "REDL", + 13, + 1 + ], + [ + "PXE", + 14, + 1 + ], + [ + "TDCV", + 16, + 7, + "r" + ] + ] + }, + { + "name": "TDCR", + "offset": "0x48", + "fields": [ + [ + "TDCF", + 0, + 7 + ], + [ + "TDCO", + 8, + 7 + ] + ] + }, + { + "name": "IR", + "offset": "0x50", + "fields": [ + [ + "RF0N", + 0, + 1 + ], + [ + "RF0F", + 1, + 1 + ], + [ + "RF0L", + 2, + 1 + ], + [ + "RF1N", + 3, + 1 + ], + [ + "RF1F", + 4, + 1 + ], + [ + "RF1L", + 5, + 1 + ], + [ + "HPM", + 6, + 1 + ], + [ + "TC", + 7, + 1 + ], + [ + "TCF", + 8, + 1 + ], + [ + "TFE", + 9, + 1 + ], + [ + "TEFN", + 10, + 1 + ], + [ + "TEFF", + 11, + 1 + ], + [ + "TEFL", + 12, + 1 + ], + [ + "TSW", + 13, + 1 + ], + [ + "MRAF", + 14, + 1 + ], + [ + "TOO", + 15, + 1 + ], + [ + "ELO", + 16, + 1 + ], + [ + "EP", + 17, + 1 + ], + [ + "EW", + 18, + 1 + ], + [ + "BO", + 19, + 1 + ], + [ + "WDI", + 20, + 1 + ], + [ + "PEA", + 21, + 1 + ], + [ + "PED", + 22, + 1 + ], + [ + "ARA", + 23, + 1 + ] + ] + }, + { + "name": "IE", + "offset": "0x54", + "fields": [ + [ + "RF0NE", + 0, + 1 + ], + [ + "RF0FE", + 1, + 1 + ], + [ + "RF0LE", + 2, + 1 + ], + [ + "RF1NE", + 3, + 1 + ], + [ + "RF1FE", + 4, + 1 + ], + [ + "RF1LE", + 5, + 1 + ], + [ + "HPME", + 6, + 1 + ], + [ + "TCE", + 7, + 1 + ], + [ + "TCFE", + 8, + 1 + ], + [ + "TFEE", + 9, + 1 + ], + [ + "TEFNE", + 10, + 1 + ], + [ + "TEFFE", + 11, + 1 + ], + [ + "TEFLE", + 12, + 1 + ], + [ + "TSWE", + 13, + 1 + ], + [ + "MRAFE", + 14, + 1 + ], + [ + "TOOE", + 15, + 1 + ], + [ + "ELOE", + 16, + 1 + ], + [ + "EPE", + 17, + 1 + ], + [ + "EWE", + 18, + 1 + ], + [ + "BOE", + 19, + 1 + ], + [ + "WDIE", + 20, + 1 + ], + [ + "PEAE", + 21, + 1 + ], + [ + "PEDE", + 22, + 1 + ], + [ + "ARAE", + 23, + 1 + ] + ] + }, + { + "name": "ILS", + "offset": "0x58", + "fields": [ + [ + "RXFIFO0", + 0, + 1 + ], + [ + "RXFIFO1", + 1, + 1 + ], + [ + "SMSG", + 2, + 1 + ], + [ + "TFERR", + 3, + 1 + ], + [ + "MISC", + 4, + 1 + ], + [ + "BERR", + 5, + 1 + ], + [ + "PERR", + 6, + 1 + ] + ] + }, + { + "name": "ILE", + "offset": "0x5C", + "fields": [ + [ + "EINT0", + 0, + 1 + ], + [ + "EINT1", + 1, + 1 + ] + ] + }, + { + "name": "RXGFC", + "offset": "0x80", + "fields": [ + [ + "RRFE", + 0, + 1 + ], + [ + "RRFS", + 1, + 1 + ], + [ + "ANFE", + 2, + 2 + ], + [ + "ANFS", + 4, + 2 + ], + [ + "F1OM", + 8, + 1 + ], + [ + "F0OM", + 9, + 1 + ], + [ + "LSS", + 16, + 5 + ], + [ + "LSE", + 24, + 4 + ] + ] + }, + { + "name": "XIDAM", + "offset": "0x84", + "reset": "0x1FFFFFFF", + "fields": [ + [ + "EIDM", + 0, + 29 + ] + ] + }, + { + "name": "HPMS", + "offset": "0x88", + "fields": [ + [ + "BIDX", + 0, + 3, + "r" + ], + [ + "MSI", + 6, + 2, + "r" + ], + [ + "FIDX", + 8, + 5, + "r" + ], + [ + "FLST", + 15, + 1, + "r" + ] + ] + }, + { + "name": "RXF0S", + "offset": "0x90", + "fields": [ + [ + "F0FL", + 0, + 4, + "r" + ], + [ + "F0GI", + 8, + 2, + "r" + ], + [ + "F0PI", + 16, + 2, + "r" + ], + [ + "F0F", + 24, + 1, + "r" + ], + [ + "RF0L", + 25, + 1, + "r" + ] + ] + }, + { + "name": "RXF0A", + "offset": "0x94", + "fields": [ + [ + "F0AI", + 0, + 3 + ] + ] + }, + { + "name": "RXF1S", + "offset": "0x98", + "fields": [ + [ + "F1FL", + 0, + 4, + "r" + ], + [ + "F1GI", + 8, + 2, + "r" + ], + [ + "F1PI", + 16, + 2, + "r" + ], + [ + "F1F", + 24, + 1, + "r" + ], + [ + "RF1L", + 25, + 1, + "r" + ] + ] + }, + { + "name": "RXF1A", + "offset": "0x9C", + "fields": [ + [ + "F1AI", + 0, + 3 + ] + ] + }, + { + "name": "TXBC", + "offset": "0xC0", + "fields": [ + [ + "TFQM", + 24, + 1 + ] + ] + }, + { + "name": "TXFQS", + "offset": "0xC4", + "reset": "0x00000003", + "fields": [ + [ + "TFFL", + 0, + 3, + "r" + ], + [ + "TFGI", + 8, + 2, + "r" + ], + [ + "TFQPI", + 16, + 2, + "r" + ], + [ + "TFQF", + 21, + 1, + "r" + ] + ] + }, + { + "name": "TXBRP", + "offset": "0xC8", + "fields": [ + [ + "TRP", + 0, + 3, + "r" + ] + ] + }, + { + "name": "TXBAR", + "offset": "0xCC", + "fields": [ + [ + "AR", + 0, + 3 + ] + ] + }, + { + "name": "TXBCR", + "offset": "0xD0", + "fields": [ + [ + "CR", + 0, + 3 + ] + ] + }, + { + "name": "TXBTO", + "offset": "0xD4", + "fields": [ + [ + "TO", + 0, + 3, + "r" + ] + ] + }, + { + "name": "TXBCF", + "offset": "0xD8", + "fields": [ + [ + "CF", + 0, + 3, + "r" + ] + ] + }, + { + "name": "TXBTIE", + "offset": "0xDC", + "fields": [ + [ + "TIE", + 0, + 3 + ] + ] + }, + { + "name": "TXBCIE", + "offset": "0xE0", + "fields": [ + [ + "CFIE", + 0, + 3 + ] + ] + }, + { + "name": "TXEFS", + "offset": "0xE4", + "fields": [ + [ + "EFFL", + 0, + 3, + "r" + ], + [ + "EFGI", + 8, + 2, + "r" + ], + [ + "EFPI", + 16, + 2, + "r" + ], + [ + "EFF", + 24, + 1, + "r" + ], + [ + "TEFL", + 25, + 1, + "r" + ] + ] + }, + { + "name": "TXEFA", + "offset": "0xE8", + "fields": [ + [ + "EFAI", + 0, + 2 + ] + ] + }, + { + "name": "CKDIV", + "offset": "0x100", + "fields": [ + [ + "PDIV", + 0, + 4 + ] + ] + } + ] + }, + { + "name": "FDCAN2", + "base": "0x40006800", + "interrupts": [ + "FDCAN2_IT0", + "FDCAN2_IT1" + ], + "derived_from": "FDCAN1" + }, + { + "name": "FDCAN3", + "base": "0x40006C00", + "interrupts": [ + "FDCAN3_IT0", + "FDCAN3_IT1" + ], + "derived_from": "FDCAN1" + }, + { + "name": "PWR", + "base": "0x40007000", + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "reset": "0x00000200", + "fields": [ + [ + "LPMS", + 0, + 3 + ], + [ + "FPD_STOP", + 3, + 1 + ], + [ + "DBP", + 8, + 1 + ], + [ + "VOS", + 9, + 2 + ], + [ + "LPR", + 14, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "fields": [ + [ + "PVDE", + 0, + 1 + ], + [ + "PVDLS", + 1, + 3 + ], + [ + "PVMEN1", + 6, + 1 + ], + [ + "PVMEN2", + 7, + 1 + ] + ] + }, + { + "name": "CR3", + "offset": "0x08", + "reset": "0x00008000", + "fields": [ + [ + "EWUP1", + 0, + 1 + ], + [ + "EWUP2", + 1, + 1 + ], + [ + "EWUP3", + 2, + 1 + ], + [ + "EWUP4", + 3, + 1 + ], + [ + "EWUP5", + 4, + 1 + ], + [ + "RRS", + 8, + 1 + ], + [ + "APC", + 10, + 1 + ], + [ + "UCPD1_STDBY", + 13, + 1 + ], + [ + "UCPD1_DBDIS", + 14, + 1 + ], + [ + "EIWUL", + 15, + 1 + ] + ] + }, + { + "name": "CR4", + "offset": "0x0C", + "fields": [ + [ + "WP1", + 0, + 1 + ], + [ + "WP2", + 1, + 1 + ], + [ + "WP3", + 2, + 1 + ], + [ + "WP4", + 3, + 1 + ], + [ + "WP5", + 4, + 1 + ], + [ + "VBE", + 8, + 1 + ], + [ + "VBRS", + 9, + 1 + ] + ] + }, + { + "name": "SR1", + "offset": "0x10", + "fields": [ + [ + "WUF1", + 0, + 1, + "r" + ], + [ + "WUF2", + 1, + 1, + "r" + ], + [ + "WUF3", + 2, + 1, + "r" + ], + [ + "WUF4", + 3, + 1, + "r" + ], + [ + "WUF5", + 4, + 1, + "r" + ], + [ + "SBF", + 8, + 1, + "r" + ], + [ + "WUFI", + 15, + 1, + "r" + ] + ] + }, + { + "name": "SR2", + "offset": "0x14", + "fields": [ + [ + "PVMO4", + 15, + 1, + "r" + ], + [ + "PVMO3", + 14, + 1, + "r" + ], + [ + "PVMO2", + 13, + 1, + "r" + ], + [ + "PVMO1", + 12, + 1, + "r" + ], + [ + "PVDO", + 11, + 1, + "r" + ], + [ + "VOSF", + 10, + 1, + "r" + ], + [ + "REGLPF", + 9, + 1, + "r" + ], + [ + "REGLPS", + 8, + 1, + "r" + ] + ] + }, + { + "name": "SCR", + "offset": "0x18", + "fields": [ + [ + "CWUF1", + 0, + 1, + "w" + ], + [ + "CWUF2", + 1, + 1, + "w" + ], + [ + "CWUF3", + 2, + 1, + "w" + ], + [ + "CWUF4", + 3, + 1, + "w" + ], + [ + "CWUF5", + 4, + 1, + "w" + ], + [ + "CSBF", + 8, + 1, + "w" + ] + ] + }, + { + "name": "PUCRA", + "offset": "0x20", + "fields": [ + [ + "PU0", + 0, + 1 + ], + [ + "PU1", + 1, + 1 + ], + [ + "PU2", + 2, + 1 + ], + [ + "PU3", + 3, + 1 + ], + [ + "PU4", + 4, + 1 + ], + [ + "PU5", + 5, + 1 + ], + [ + "PU6", + 6, + 1 + ], + [ + "PU7", + 7, + 1 + ], + [ + "PU8", + 8, + 1 + ], + [ + "PU9", + 9, + 1 + ], + [ + "PU10", + 10, + 1 + ], + [ + "PU11", + 11, + 1 + ], + [ + "PU12", + 12, + 1 + ], + [ + "PU13", + 13, + 1 + ], + [ + "PU15", + 15, + 1 + ] + ] + }, + { + "name": "PDCRA", + "offset": "0x24", + "fields": [ + [ + "PD0", + 0, + 1 + ], + [ + "PD1", + 1, + 1 + ], + [ + "PD2", + 2, + 1 + ], + [ + "PD3", + 3, + 1 + ], + [ + "PD4", + 4, + 1 + ], + [ + "PD5", + 5, + 1 + ], + [ + "PD6", + 6, + 1 + ], + [ + "PD7", + 7, + 1 + ], + [ + "PD8", + 8, + 1 + ], + [ + "PD9", + 9, + 1 + ], + [ + "PD10", + 10, + 1 + ], + [ + "PD11", + 11, + 1 + ], + [ + "PD12", + 12, + 1 + ], + [ + "PD14", + 14, + 1 + ] + ] + }, + { + "name": "PUCRB", + "offset": "0x28", + "fields": [ + [ + "PU0", + 0, + 1 + ], + [ + "PU1", + 1, + 1 + ], + [ + "PU2", + 2, + 1 + ], + [ + "PU3", + 3, + 1 + ], + [ + "PU4", + 4, + 1 + ], + [ + "PU5", + 5, + 1 + ], + [ + "PU6", + 6, + 1 + ], + [ + "PU7", + 7, + 1 + ], + [ + "PU8", + 8, + 1 + ], + [ + "PU9", + 9, + 1 + ], + [ + "PU10", + 10, + 1 + ], + [ + "PU11", + 11, + 1 + ], + [ + "PU12", + 12, + 1 + ], + [ + "PU13", + 13, + 1 + ], + [ + "PU14", + 14, + 1 + ], + [ + "PU15", + 15, + 1 + ] + ] + }, + { + "name": "PDCRB", + "offset": "0x2C", + "fields": [ + [ + "PD0", + 0, + 1 + ], + [ + "PD1", + 1, + 1 + ], + [ + "PD2", + 2, + 1 + ], + [ + "PD3", + 3, + 1 + ], + [ + "PD5", + 5, + 1 + ], + [ + "PD6", + 6, + 1 + ], + [ + "PD7", + 7, + 1 + ], + [ + "PD8", + 8, + 1 + ], + [ + "PD9", + 9, + 1 + ], + [ + "PD10", + 10, + 1 + ], + [ + "PD11", + 11, + 1 + ], + [ + "PD12", + 12, + 1 + ], + [ + "PD13", + 13, + 1 + ], + [ + "PD14", + 14, + 1 + ], + [ + "PD15", + 15, + 1 + ] + ] + }, + { + "name": "PUCRC", + "offset": "0x30", + "fields": [ + [ + "PU0", + 0, + 1 + ], + [ + "PU1", + 1, + 1 + ], + [ + "PU2", + 2, + 1 + ], + [ + "PU3", + 3, + 1 + ], + [ + "PU4", + 4, + 1 + ], + [ + "PU5", + 5, + 1 + ], + [ + "PU6", + 6, + 1 + ], + [ + "PU7", + 7, + 1 + ], + [ + "PU8", + 8, + 1 + ], + [ + "PU9", + 9, + 1 + ], + [ + "PU10", + 10, + 1 + ], + [ + "PU11", + 11, + 1 + ], + [ + "PU12", + 12, + 1 + ], + [ + "PU13", + 13, + 1 + ], + [ + "PU14", + 14, + 1 + ], + [ + "PU15", + 15, + 1 + ] + ] + }, + { + "name": "PDCRC", + "offset": "0x34", + "fields": [ + [ + "PD0", + 0, + 1 + ], + [ + "PD1", + 1, + 1 + ], + [ + "PD2", + 2, + 1 + ], + [ + "PD3", + 3, + 1 + ], + [ + "PD4", + 4, + 1 + ], + [ + "PD5", + 5, + 1 + ], + [ + "PD6", + 6, + 1 + ], + [ + "PD7", + 7, + 1 + ], + [ + "PD8", + 8, + 1 + ], + [ + "PD9", + 9, + 1 + ], + [ + "PD10", + 10, + 1 + ], + [ + "PD11", + 11, + 1 + ], + [ + "PD12", + 12, + 1 + ], + [ + "PD13", + 13, + 1 + ], + [ + "PD14", + 14, + 1 + ], + [ + "PD15", + 15, + 1 + ] + ] + }, + { + "name": "PUCRD", + "offset": "0x38", + "fields": [ + [ + "PU0", + 0, + 1 + ], + [ + "PU1", + 1, + 1 + ], + [ + "PU2", + 2, + 1 + ], + [ + "PU3", + 3, + 1 + ], + [ + "PU4", + 4, + 1 + ], + [ + "PU5", + 5, + 1 + ], + [ + "PU6", + 6, + 1 + ], + [ + "PU7", + 7, + 1 + ], + [ + "PU8", + 8, + 1 + ], + [ + "PU9", + 9, + 1 + ], + [ + "PU10", + 10, + 1 + ], + [ + "PU11", + 11, + 1 + ], + [ + "PU12", + 12, + 1 + ], + [ + "PU13", + 13, + 1 + ], + [ + "PU14", + 14, + 1 + ], + [ + "PU15", + 15, + 1 + ] + ] + }, + { + "name": "PDCRD", + "offset": "0x3C", + "fields": [ + [ + "PD0", + 0, + 1 + ], + [ + "PD1", + 1, + 1 + ], + [ + "PD2", + 2, + 1 + ], + [ + "PD3", + 3, + 1 + ], + [ + "PD4", + 4, + 1 + ], + [ + "PD5", + 5, + 1 + ], + [ + "PD6", + 6, + 1 + ], + [ + "PD7", + 7, + 1 + ], + [ + "PD8", + 8, + 1 + ], + [ + "PD9", + 9, + 1 + ], + [ + "PD10", + 10, + 1 + ], + [ + "PD11", + 11, + 1 + ], + [ + "PD12", + 12, + 1 + ], + [ + "PD13", + 13, + 1 + ], + [ + "PD14", + 14, + 1 + ], + [ + "PD15", + 15, + 1 + ] + ] + }, + { + "name": "PUCRE", + "offset": "0x40", + "fields": [ + [ + "PU0", + 0, + 1 + ], + [ + "PU1", + 1, + 1 + ], + [ + "PU2", + 2, + 1 + ], + [ + "PU3", + 3, + 1 + ], + [ + "PU4", + 4, + 1 + ], + [ + "PU5", + 5, + 1 + ], + [ + "PU6", + 6, + 1 + ], + [ + "PU7", + 7, + 1 + ], + [ + "PU8", + 8, + 1 + ], + [ + "PU9", + 9, + 1 + ], + [ + "PU10", + 10, + 1 + ], + [ + "PU11", + 11, + 1 + ], + [ + "PU12", + 12, + 1 + ], + [ + "PU13", + 13, + 1 + ], + [ + "PU14", + 14, + 1 + ], + [ + "PU15", + 15, + 1 + ] + ] + }, + { + "name": "PDCRE", + "offset": "0x44", + "fields": [ + [ + "PD0", + 0, + 1 + ], + [ + "PD1", + 1, + 1 + ], + [ + "PD2", + 2, + 1 + ], + [ + "PD3", + 3, + 1 + ], + [ + "PD4", + 4, + 1 + ], + [ + "PD5", + 5, + 1 + ], + [ + "PD6", + 6, + 1 + ], + [ + "PD7", + 7, + 1 + ], + [ + "PD8", + 8, + 1 + ], + [ + "PD9", + 9, + 1 + ], + [ + "PD10", + 10, + 1 + ], + [ + "PD11", + 11, + 1 + ], + [ + "PD12", + 12, + 1 + ], + [ + "PD13", + 13, + 1 + ], + [ + "PD14", + 14, + 1 + ], + [ + "PD15", + 15, + 1 + ] + ] + }, + { + "name": "PUCRF", + "offset": "0x48", + "fields": [ + [ + "PU0", + 0, + 1 + ], + [ + "PU1", + 1, + 1 + ], + [ + "PU2", + 2, + 1 + ], + [ + "PU3", + 3, + 1 + ], + [ + "PU4", + 4, + 1 + ], + [ + "PU5", + 5, + 1 + ], + [ + "PU6", + 6, + 1 + ], + [ + "PU7", + 7, + 1 + ], + [ + "PU8", + 8, + 1 + ], + [ + "PU9", + 9, + 1 + ], + [ + "PU10", + 10, + 1 + ], + [ + "PU11", + 11, + 1 + ], + [ + "PU12", + 12, + 1 + ], + [ + "PU13", + 13, + 1 + ], + [ + "PU14", + 14, + 1 + ], + [ + "PU15", + 15, + 1 + ] + ] + }, + { + "name": "PDCRF", + "offset": "0x4C", + "fields": [ + [ + "PD0", + 0, + 1 + ], + [ + "PD1", + 1, + 1 + ], + [ + "PD2", + 2, + 1 + ], + [ + "PD3", + 3, + 1 + ], + [ + "PD4", + 4, + 1 + ], + [ + "PD5", + 5, + 1 + ], + [ + "PD6", + 6, + 1 + ], + [ + "PD7", + 7, + 1 + ], + [ + "PD8", + 8, + 1 + ], + [ + "PD9", + 9, + 1 + ], + [ + "PD10", + 10, + 1 + ], + [ + "PD11", + 11, + 1 + ], + [ + "PD12", + 12, + 1 + ], + [ + "PD13", + 13, + 1 + ], + [ + "PD14", + 14, + 1 + ], + [ + "PD15", + 15, + 1 + ] + ] + }, + { + "name": "PUCRG", + "offset": "0x50", + "fields": [ + [ + "PU0", + 0, + 1 + ], + [ + "PU1", + 1, + 1 + ], + [ + "PU2", + 2, + 1 + ], + [ + "PU3", + 3, + 1 + ], + [ + "PU4", + 4, + 1 + ], + [ + "PU5", + 5, + 1 + ], + [ + "PU6", + 6, + 1 + ], + [ + "PU7", + 7, + 1 + ], + [ + "PU8", + 8, + 1 + ], + [ + "PU9", + 9, + 1 + ], + [ + "PU10", + 10, + 1 + ] + ] + }, + { + "name": "PDCRG", + "offset": "0x54", + "fields": [ + [ + "PD0", + 0, + 1 + ], + [ + "PD1", + 1, + 1 + ], + [ + "PD2", + 2, + 1 + ], + [ + "PD3", + 3, + 1 + ], + [ + "PD4", + 4, + 1 + ], + [ + "PD5", + 5, + 1 + ], + [ + "PD6", + 6, + 1 + ], + [ + "PD7", + 7, + 1 + ], + [ + "PD8", + 8, + 1 + ], + [ + "PD9", + 9, + 1 + ], + [ + "PD10", + 10, + 1 + ] + ] + }, + { + "name": "CR5", + "offset": "0x80", + "reset": "0x00000100", + "fields": [ + [ + "R1MODE", + 8, + 1 + ] + ] + } + ], + "interrupts": [ + "PVD_PVM" + ] + }, + { + "name": "I2C3", + "base": "0x40007800", + "interrupts": [ + "I2C3_EV", + "I2C3_ER" + ], + "derived_from": "I2C1" + }, + { + "name": "LPTIM1", + "base": "0x40007C00", + "interrupts": [ + "LPTIM1" + ], + "registers": [ + { + "name": "ISR", + "offset": "0x00", + "fields": [ + [ + "DOWN", + 6, + 1, + "r" + ], + [ + "UP", + 5, + 1, + "r" + ], + [ + "ARROK", + 4, + 1, + "r" + ], + [ + "CMPOK", + 3, + 1, + "r" + ], + [ + "EXTTRIG", + 2, + 1, + "r" + ], + [ + "ARRM", + 1, + 1, + "r" + ], + [ + "CMPM", + 0, + 1, + "r" + ] + ] + }, + { + "name": "ICR", + "offset": "0x04", + "fields": [ + [ + "DOWNCF", + 6, + 1, + "w" + ], + [ + "UPCF", + 5, + 1, + "w" + ], + [ + "ARROKCF", + 4, + 1, + "w" + ], + [ + "CMPOKCF", + 3, + 1, + "w" + ], + [ + "EXTTRIGCF", + 2, + 1, + "w" + ], + [ + "ARRMCF", + 1, + 1, + "w" + ], + [ + "CMPMCF", + 0, + 1, + "w" + ] + ] + }, + { + "name": "IER", + "offset": "0x08", + "fields": [ + [ + "DOWNIE", + 6, + 1 + ], + [ + "UPIE", + 5, + 1 + ], + [ + "ARROKIE", + 4, + 1 + ], + [ + "CMPOKIE", + 3, + 1 + ], + [ + "EXTTRIGIE", + 2, + 1 + ], + [ + "ARRMIE", + 1, + 1 + ], + [ + "CMPMIE", + 0, + 1 + ] + ] + }, + { + "name": "CFGR", + "offset": "0x0C", + "fields": [ + [ + "ENC", + 24, + 1 + ], + [ + "COUNTMODE", + 23, + 1 + ], + [ + "PRELOAD", + 22, + 1 + ], + [ + "WAVPOL", + 21, + 1 + ], + [ + "WAVE", + 20, + 1 + ], + [ + "TIMOUT", + 19, + 1 + ], + [ + "TRIGEN", + 17, + 2 + ], + [ + "TRIGSEL", + 13, + 4 + ], + [ + "PRESC", + 9, + 3 + ], + [ + "TRGFLT", + 6, + 2 + ], + [ + "CKFLT", + 3, + 2 + ], + [ + "CKPOL", + 1, + 2 + ], + [ + "CKSEL", + 0, + 1 + ] + ] + }, + { + "name": "CR", + "offset": "0x10", + "fields": [ + [ + "RSTARE", + 4, + 1 + ], + [ + "COUNTRST", + 3, + 1 + ], + [ + "CNTSTRT", + 2, + 1 + ], + [ + "SNGSTRT", + 1, + 1 + ], + [ + "ENABLE", + 0, + 1 + ] + ] + }, + { + "name": "CMP", + "offset": "0x14", + "fields": [ + [ + "CMP", + 0, + 16 + ] + ] + }, + { + "name": "ARR", + "offset": "0x18", + "reset": "0x00000001", + "fields": [ + [ + "ARR", + 0, + 16 + ] + ] + }, + { + "name": "CNT", + "offset": "0x1C", + "fields": [ + [ + "CNT", + 0, + 16, + "r" + ] + ] + }, + { + "name": "OR", + "offset": "0x20", + "fields": [ + [ + "IN1", + 0, + 1 + ], + [ + "IN2", + 1, + 1 + ], + [ + "IN1_2_1", + 2, + 2 + ], + [ + "IN2_2_1", + 4, + 2 + ] + ] + } + ] + }, + { + "name": "LPUART1", + "base": "0x40008000", + "interrupts": [ + "LPUART" + ], + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "fields": [ + [ + "RXFFIE", + 31, + 1 + ], + [ + "TXFEIE", + 30, + 1 + ], + [ + "FIFOEN", + 29, + 1 + ], + [ + "M1", + 28, + 1 + ], + [ + "DEAT4", + 25, + 1 + ], + [ + "DEAT3", + 24, + 1 + ], + [ + "DEAT2", + 23, + 1 + ], + [ + "DEAT1", + 22, + 1 + ], + [ + "DEAT0", + 21, + 1 + ], + [ + "DEDT4", + 20, + 1 + ], + [ + "DEDT3", + 19, + 1 + ], + [ + "DEDT2", + 18, + 1 + ], + [ + "DEDT1", + 17, + 1 + ], + [ + "DEDT0", + 16, + 1 + ], + [ + "CMIE", + 14, + 1 + ], + [ + "MME", + 13, + 1 + ], + [ + "M0", + 12, + 1 + ], + [ + "WAKE", + 11, + 1 + ], + [ + "PCE", + 10, + 1 + ], + [ + "PS", + 9, + 1 + ], + [ + "PEIE", + 8, + 1 + ], + [ + "TXEIE", + 7, + 1 + ], + [ + "TCIE", + 6, + 1 + ], + [ + "RXNEIE", + 5, + 1 + ], + [ + "IDLEIE", + 4, + 1 + ], + [ + "TE", + 3, + 1 + ], + [ + "RE", + 2, + 1 + ], + [ + "UESM", + 1, + 1 + ], + [ + "UE", + 0, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "fields": [ + [ + "ADD4_7", + 28, + 4 + ], + [ + "ADD0_3", + 24, + 4 + ], + [ + "MSBFIRST", + 19, + 1 + ], + [ + "TAINV", + 18, + 1 + ], + [ + "TXINV", + 17, + 1 + ], + [ + "RXINV", + 16, + 1 + ], + [ + "SWAP", + 15, + 1 + ], + [ + "STOP", + 12, + 2 + ], + [ + "ADDM7", + 4, + 1 + ] + ] + }, + { + "name": "CR3", + "offset": "0x08", + "fields": [ + [ + "TXFTCFG", + 29, + 3 + ], + [ + "RXFTIE", + 28, + 1 + ], + [ + "RXFTCFG", + 25, + 3 + ], + [ + "TXFTIE", + 23, + 1 + ], + [ + "WUFIE", + 22, + 1 + ], + [ + "WUS", + 20, + 2 + ], + [ + "DEP", + 15, + 1 + ], + [ + "DEM", + 14, + 1 + ], + [ + "DDRE", + 13, + 1 + ], + [ + "OVRDIS", + 12, + 1 + ], + [ + "CTSIE", + 10, + 1 + ], + [ + "CTSE", + 9, + 1 + ], + [ + "RTSE", + 8, + 1 + ], + [ + "DMAT", + 7, + 1 + ], + [ + "DMAR", + 6, + 1 + ], + [ + "HDSEL", + 3, + 1 + ], + [ + "EIE", + 0, + 1 + ] + ] + }, + { + "name": "BRR", + "offset": "0x0C", + "fields": [ + [ + "BRR", + 0, + 20 + ] + ] + }, + { + "name": "RQR", + "offset": "0x18", + "fields": [ + [ + "TXFRQ", + 4, + 1, + "w" + ], + [ + "RXFRQ", + 3, + 1, + "w" + ], + [ + "MMRQ", + 2, + 1, + "w" + ], + [ + "SBKRQ", + 1, + 1, + "w" + ] + ] + }, + { + "name": "ISR", + "offset": "0x1C", + "reset": "0x008000C0", + "fields": [ + [ + "TXFT", + 27, + 1, + "r" + ], + [ + "RXFT", + 26, + 1, + "r" + ], + [ + "RXFF", + 24, + 1, + "r" + ], + [ + "TXFE", + 23, + 1, + "r" + ], + [ + "REACK", + 22, + 1, + "r" + ], + [ + "TEACK", + 21, + 1, + "r" + ], + [ + "WUF", + 20, + 1, + "r" + ], + [ + "RWU", + 19, + 1, + "r" + ], + [ + "SBKF", + 18, + 1, + "r" + ], + [ + "CMF", + 17, + 1, + "r" + ], + [ + "BUSY", + 16, + 1, + "r" + ], + [ + "CTS", + 10, + 1, + "r" + ], + [ + "CTSIF", + 9, + 1, + "r" + ], + [ + "TXE", + 7, + 1, + "r" + ], + [ + "TC", + 6, + 1, + "r" + ], + [ + "RXNE", + 5, + 1, + "r" + ], + [ + "IDLE", + 4, + 1, + "r" + ], + [ + "ORE", + 3, + 1, + "r" + ], + [ + "NF", + 2, + 1, + "r" + ], + [ + "FE", + 1, + 1, + "r" + ], + [ + "PE", + 0, + 1, + "r" + ] + ] + }, + { + "name": "ICR", + "offset": "0x20", + "fields": [ + [ + "WUCF", + 20, + 1, + "w" + ], + [ + "CMCF", + 17, + 1, + "w" + ], + [ + "CTSCF", + 9, + 1, + "w" + ], + [ + "TCCF", + 6, + 1, + "w" + ], + [ + "IDLECF", + 4, + 1, + "w" + ], + [ + "ORECF", + 3, + 1, + "w" + ], + [ + "NCF", + 2, + 1, + "w" + ], + [ + "FECF", + 1, + 1, + "w" + ], + [ + "PECF", + 0, + 1, + "w" + ] + ] + }, + { + "name": "RDR", + "offset": "0x24", + "fields": [ + [ + "RDR", + 0, + 9, + "r" + ] + ] + }, + { + "name": "TDR", + "offset": "0x28", + "fields": [ + [ + "TDR", + 0, + 9 + ] + ] + }, + { + "name": "PRESC", + "offset": "0x2C", + "fields": [ + [ + "PRESCALER", + 0, + 4 + ] + ] + } + ] + }, + { + "name": "I2C4", + "base": "0x40008400", + "interrupts": [ + "I2C4_EV", + "I2C4_ER" + ], + "derived_from": "I2C1" + }, + { + "name": "UCPD1", + "base": "0x4000A000", + "interrupts": [ + "UCPD1" + ], + "registers": [ + { + "name": "CFG1", + "offset": "0x00", + "fields": [ + [ + "HBITCLKDIV", + 0, + 6 + ], + [ + "IFRGAP", + 6, + 5 + ], + [ + "TRANSWIN", + 11, + 5 + ], + [ + "PSC_USBPDCLK", + 17, + 3 + ], + [ + "RXORDSETEN", + 20, + 9 + ], + [ + "TXDMAEN", + 29, + 1 + ], + [ + "RXDMAEN", + 30, + 1 + ], + [ + "UCPDEN", + 31, + 1 + ] + ] + }, + { + "name": "CFG2", + "offset": "0x04", + "fields": [ + [ + "RXFILTDIS", + 0, + 1 + ], + [ + "RXFILT2N3", + 1, + 1 + ], + [ + "FORCECLK", + 2, + 1 + ], + [ + "WUPEN", + 3, + 1 + ] + ] + }, + { + "name": "CR", + "offset": "0x0C", + "fields": [ + [ + "TXMODE", + 0, + 2 + ], + [ + "TXSEND", + 2, + 1 + ], + [ + "TXHRST", + 3, + 1 + ], + [ + "RXMODE", + 4, + 1 + ], + [ + "PHYRXEN", + 5, + 1 + ], + [ + "PHYCCSEL", + 6, + 1 + ], + [ + "ANASUBMODE", + 7, + 2 + ], + [ + "ANAMODE", + 9, + 1 + ], + [ + "CCENABLE", + 10, + 2 + ], + [ + "FRSRXEN", + 16, + 1 + ], + [ + "FRSTX", + 17, + 1 + ], + [ + "RDCH", + 18, + 1 + ], + [ + "CC1TCDIS", + 20, + 1 + ], + [ + "CC2TCDIS", + 21, + 1 + ] + ] + }, + { + "name": "IMR", + "offset": "0x10", + "fields": [ + [ + "TXISIE", + 0, + 1 + ], + [ + "TXMSGDISCIE", + 1, + 1 + ], + [ + "TXMSGSENTIE", + 2, + 1 + ], + [ + "TXMSGABTIE", + 3, + 1 + ], + [ + "HRSTDISCIE", + 4, + 1 + ], + [ + "HRSTSENTIE", + 5, + 1 + ], + [ + "TXUNDIE", + 6, + 1 + ], + [ + "RXNEIE", + 8, + 1 + ], + [ + "RXORDDETIE", + 9, + 1 + ], + [ + "RXHRSTDETIE", + 10, + 1 + ], + [ + "RXOVRIE", + 11, + 1 + ], + [ + "RXMSGENDIE", + 12, + 1 + ], + [ + "TYPECEVT1IE", + 14, + 1 + ], + [ + "TYPECEVT2IE", + 15, + 1 + ], + [ + "FRSEVTIE", + 20, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x14", + "fields": [ + [ + "TXIS", + 0, + 1 + ], + [ + "TXMSGDISC", + 1, + 1 + ], + [ + "TXMSGSENT", + 2, + 1 + ], + [ + "TXMSGABT", + 3, + 1 + ], + [ + "HRSTDISC", + 4, + 1 + ], + [ + "HRSTSENT", + 5, + 1 + ], + [ + "TXUND", + 6, + 1 + ], + [ + "RXNE", + 8, + 1 + ], + [ + "RXORDDET", + 9, + 1 + ], + [ + "RXHRSTDET", + 10, + 1 + ], + [ + "RXOVR", + 11, + 1 + ], + [ + "RXMSGEND", + 12, + 1 + ], + [ + "RXERR", + 13, + 1 + ], + [ + "TYPECEVT1", + 14, + 1 + ], + [ + "TYPECEVT2", + 15, + 1 + ], + [ + "TYPEC_VSTATE_CC1", + 16, + 2 + ], + [ + "TYPEC_VSTATE_CC2", + 18, + 2 + ], + [ + "FRSEVT", + 20, + 1 + ] + ] + }, + { + "name": "ICR", + "offset": "0x18", + "fields": [ + [ + "TXMSGDISCCF", + 1, + 1 + ], + [ + "TXMSGSENTCF", + 2, + 1 + ], + [ + "TXMSGABTCF", + 3, + 1 + ], + [ + "HRSTDISCCF", + 4, + 1 + ], + [ + "HRSTSENTCF", + 5, + 1 + ], + [ + "TXUNDCF", + 6, + 1 + ], + [ + "RXORDDETCF", + 9, + 1 + ], + [ + "RXHRSTDETCF", + 10, + 1 + ], + [ + "RXOVRCF", + 11, + 1 + ], + [ + "RXMSGENDCF", + 12, + 1 + ], + [ + "TYPECEVT1CF", + 14, + 1 + ], + [ + "TYPECEVT2CF", + 15, + 1 + ], + [ + "FRSEVTCF", + 20, + 1 + ] + ] + }, + { + "name": "TX_ORDSET", + "offset": "0x1C", + "fields": [ + [ + "TXORDSET", + 0, + 20 + ] + ] + }, + { + "name": "TX_PAYSZ", + "offset": "0x20", + "fields": [ + [ + "TXPAYSZ", + 0, + 10 + ] + ] + }, + { + "name": "TXDR", + "offset": "0x24", + "fields": [ + [ + "TXDATA", + 0, + 8 + ] + ] + }, + { + "name": "RX_ORDSET", + "offset": "0x28", + "fields": [ + [ + "RXORDSET", + 0, + 3, + "r" + ], + [ + "RXSOP3OF4", + 3, + 1, + "r" + ], + [ + "RXSOPKINVALID", + 4, + 3, + "r" + ] + ] + }, + { + "name": "RX_PAYSZ", + "offset": "0x2C", + "fields": [ + [ + "RXPAYSZ", + 0, + 10, + "r" + ] + ] + }, + { + "name": "RXDR", + "offset": "0x30", + "fields": [ + [ + "RXDATA", + 0, + 8, + "r" + ] + ] + }, + { + "name": "RX_ORDEXT1", + "offset": "0x34", + "fields": [ + [ + "RXSOPX1", + 0, + 20 + ] + ] + }, + { + "name": "RX_ORDEXT2", + "offset": "0x38", + "fields": [ + [ + "RXSOPX2", + 0, + 20 + ] + ] + } + ] + }, + { + "name": "SYSCFG", + "base": "0x40010000", + "registers": [ + { + "name": "MEMRMP", + "offset": "0x00", + "fields": [ + [ + "MEM_MODE", + 0, + 3 + ], + [ + "FB_mode", + 8, + 1 + ] + ] + }, + { + "name": "CFGR1", + "offset": "0x04", + "reset": "0x7C000001", + "fields": [ + [ + "BOOSTEN", + 8, + 1 + ], + [ + "ANASWVDD", + 9, + 1 + ], + [ + "I2C_PB6_FMP", + 16, + 1 + ], + [ + "I2C_PB7_FMP", + 17, + 1 + ], + [ + "I2C_PB8_FMP", + 18, + 1 + ], + [ + "I2C_PB9_FMP", + 19, + 1 + ], + [ + "I2C1_FMP", + 20, + 1 + ], + [ + "I2C2_FMP", + 21, + 1 + ], + [ + "I2C3_FMP", + 22, + 1 + ], + [ + "I2C4_FMP", + 23, + 1 + ], + [ + "FPU_IE", + 26, + 6 + ] + ] + }, + { + "name": "EXTICR1", + "offset": "0x08", + "fields": [ + [ + "EXTI3", + 12, + 4 + ], + [ + "EXTI2", + 8, + 4 + ], + [ + "EXTI1", + 4, + 4 + ], + [ + "EXTI0", + 0, + 4 + ] + ] + }, + { + "name": "EXTICR2", + "offset": "0x0C", + "fields": [ + [ + "EXTI7", + 12, + 4 + ], + [ + "EXTI6", + 8, + 4 + ], + [ + "EXTI5", + 4, + 4 + ], + [ + "EXTI4", + 0, + 4 + ] + ] + }, + { + "name": "EXTICR3", + "offset": "0x10", + "fields": [ + [ + "EXTI11", + 12, + 4 + ], + [ + "EXTI10", + 8, + 4 + ], + [ + "EXTI9", + 4, + 4 + ], + [ + "EXTI8", + 0, + 4 + ] + ] + }, + { + "name": "EXTICR4", + "offset": "0x14", + "fields": [ + [ + "EXTI15", + 12, + 4 + ], + [ + "EXTI14", + 8, + 4 + ], + [ + "EXTI13", + 4, + 4 + ], + [ + "EXTI12", + 0, + 4 + ] + ] + }, + { + "name": "SCSR", + "offset": "0x18", + "fields": [ + [ + "CCMER", + 0, + 1 + ], + [ + "CCMBSY", + 1, + 1, + "r" + ] + ] + }, + { + "name": "CFGR2", + "offset": "0x1C", + "fields": [ + [ + "CLL", + 0, + 1 + ], + [ + "SPL", + 1, + 1 + ], + [ + "PVDL", + 2, + 1 + ], + [ + "ECCL", + 3, + 1 + ], + [ + "SPF", + 8, + 1 + ] + ] + }, + { + "name": "SWPR", + "offset": "0x20", + "fields": [ + [ + "Page0_WP", + 0, + 1 + ], + [ + "Page1_WP", + 1, + 1 + ], + [ + "Page2_WP", + 2, + 1 + ], + [ + "Page3_WP", + 3, + 1 + ], + [ + "Page4_WP", + 4, + 1 + ], + [ + "Page5_WP", + 5, + 1 + ], + [ + "Page6_WP", + 6, + 1 + ], + [ + "Page7_WP", + 7, + 1 + ], + [ + "Page8_WP", + 8, + 1 + ], + [ + "Page9_WP", + 9, + 1 + ], + [ + "Page10_WP", + 10, + 1 + ], + [ + "Page11_WP", + 11, + 1 + ], + [ + "Page12_WP", + 12, + 1 + ], + [ + "Page13_WP", + 13, + 1 + ], + [ + "Page14_WP", + 14, + 1 + ], + [ + "Page15_WP", + 15, + 1 + ], + [ + "Page16_WP", + 16, + 1 + ], + [ + "Page17_WP", + 17, + 1 + ], + [ + "Page18_WP", + 18, + 1 + ], + [ + "Page19_WP", + 19, + 1 + ], + [ + "Page20_WP", + 20, + 1 + ], + [ + "Page21_WP", + 21, + 1 + ], + [ + "Page22_WP", + 22, + 1 + ], + [ + "Page23_WP", + 23, + 1 + ], + [ + "Page24_WP", + 24, + 1 + ], + [ + "Page25_WP", + 25, + 1 + ], + [ + "Page26_WP", + 26, + 1 + ], + [ + "Page27_WP", + 27, + 1 + ], + [ + "Page28_WP", + 28, + 1 + ], + [ + "Page29_WP", + 29, + 1 + ], + [ + "Page30_WP", + 30, + 1 + ], + [ + "Page31_WP", + 31, + 1 + ] + ] + }, + { + "name": "SKR", + "offset": "0x24", + "fields": [ + [ + "KEY", + 0, + 8, + "w" + ] + ] + } + ] + }, + { + "name": "VREFBUF", + "base": "0x40010030", + "registers": [ + { + "name": "CSR", + "offset": "0x00", + "reset": "0x00000002", + "fields": [ + [ + "ENVR", + 0, + 1 + ], + [ + "HIZ", + 1, + 1 + ], + [ + "VRR", + 3, + 1, + "r" + ], + [ + "VRS", + 4, + 2 + ] + ] + }, + { + "name": "CCR", + "offset": "0x04", + "fields": [ + [ + "TRIM", + 0, + 6 + ] + ] + } + ] + }, + { + "name": "COMP", + "base": "0x40010200", + "interrupts": [ + "COMP1_2_3", + "COMP4_5_6", + "COMP7" + ], + "registers": [ + { + "name": "C1CSR", + "offset": "0x00", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "INMSEL", + 4, + 3 + ], + [ + "INPSEL", + 8, + 1 + ], + [ + "POL", + 15, + 1 + ], + [ + "HYST", + 16, + 3 + ], + [ + "BLANKSEL", + 19, + 3 + ], + [ + "BRGEN", + 22, + 1 + ], + [ + "SCALEN", + 23, + 1 + ], + [ + "VALUE", + 30, + 1, + "r" + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "C2CSR", + "offset": "0x04", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "INMSEL", + 4, + 3 + ], + [ + "INPSEL", + 8, + 1 + ], + [ + "POL", + 15, + 1 + ], + [ + "HYST", + 16, + 3 + ], + [ + "BLANKSEL", + 19, + 3 + ], + [ + "BRGEN", + 22, + 1 + ], + [ + "SCALEN", + 23, + 1 + ], + [ + "VALUE", + 30, + 1, + "r" + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "C3CSR", + "offset": "0x08", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "INMSEL", + 4, + 3 + ], + [ + "INPSEL", + 8, + 1 + ], + [ + "POL", + 15, + 1 + ], + [ + "HYST", + 16, + 3 + ], + [ + "BLANKSEL", + 19, + 3 + ], + [ + "BRGEN", + 22, + 1 + ], + [ + "SCALEN", + 23, + 1 + ], + [ + "VALUE", + 30, + 1, + "r" + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "C4CSR", + "offset": "0x0C", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "INMSEL", + 4, + 3 + ], + [ + "INPSEL", + 8, + 1 + ], + [ + "POL", + 15, + 1 + ], + [ + "HYST", + 16, + 3 + ], + [ + "BLANKSEL", + 19, + 3 + ], + [ + "BRGEN", + 22, + 1 + ], + [ + "SCALEN", + 23, + 1 + ], + [ + "VALUE", + 30, + 1, + "r" + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "C5CSR", + "offset": "0x10", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "INMSEL", + 4, + 3 + ], + [ + "INPSEL", + 8, + 1 + ], + [ + "POL", + 15, + 1 + ], + [ + "HYST", + 16, + 3 + ], + [ + "BLANKSEL", + 19, + 3 + ], + [ + "BRGEN", + 22, + 1 + ], + [ + "SCALEN", + 23, + 1 + ], + [ + "VALUE", + 30, + 1, + "r" + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "C6CSR", + "offset": "0x14", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "INMSEL", + 4, + 3 + ], + [ + "INPSEL", + 8, + 1 + ], + [ + "POL", + 15, + 1 + ], + [ + "HYST", + 16, + 3 + ], + [ + "BLANKSEL", + 19, + 3 + ], + [ + "BRGEN", + 22, + 1 + ], + [ + "SCALEN", + 23, + 1 + ], + [ + "VALUE", + 30, + 1, + "r" + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "C7CSR", + "offset": "0x18", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "INMSEL", + 4, + 3 + ], + [ + "INPSEL", + 8, + 1 + ], + [ + "POL", + 15, + 1 + ], + [ + "HYST", + 16, + 3 + ], + [ + "BLANKSEL", + 19, + 3 + ], + [ + "BRGEN", + 22, + 1 + ], + [ + "SCALEN", + 23, + 1 + ], + [ + "VALUE", + 30, + 1, + "r" + ], + [ + "LOCK", + 31, + 1 + ] + ] + } + ] + }, + { + "name": "OPAMP", + "base": "0x40010300", + "registers": [ + { + "name": "OPAMP1_CSR", + "offset": "0x00", + "fields": [ + [ + "OPAEN", + 0, + 1 + ], + [ + "FORCE_VP", + 1, + 1 + ], + [ + "VP_SEL", + 2, + 2 + ], + [ + "USERTRIM", + 4, + 1 + ], + [ + "VM_SEL", + 5, + 2 + ], + [ + "OPAHSM", + 7, + 1 + ], + [ + "OPAINTOEN", + 8, + 1 + ], + [ + "CALON", + 11, + 1 + ], + [ + "CALSEL", + 12, + 2 + ], + [ + "PGA_GAIN", + 14, + 5 + ], + [ + "TRIMOFFSETP", + 19, + 5 + ], + [ + "TRIMOFFSETN", + 24, + 5 + ], + [ + "CALOUT", + 30, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "OPAMP2_CSR", + "offset": "0x04", + "fields": [ + [ + "OPAEN", + 0, + 1 + ], + [ + "FORCE_VP", + 1, + 1 + ], + [ + "VP_SEL", + 2, + 2 + ], + [ + "USERTRIM", + 4, + 1 + ], + [ + "VM_SEL", + 5, + 2 + ], + [ + "OPAHSM", + 7, + 1 + ], + [ + "OPAINTOEN", + 8, + 1 + ], + [ + "CALON", + 11, + 1 + ], + [ + "CALSEL", + 12, + 2 + ], + [ + "PGA_GAIN", + 14, + 5 + ], + [ + "TRIMOFFSETP", + 19, + 5 + ], + [ + "TRIMOFFSETN", + 24, + 5 + ], + [ + "CALOUT", + 30, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "OPAMP3_CSR", + "offset": "0x08", + "fields": [ + [ + "OPAEN", + 0, + 1 + ], + [ + "FORCE_VP", + 1, + 1 + ], + [ + "VP_SEL", + 2, + 2 + ], + [ + "USERTRIM", + 4, + 1 + ], + [ + "VM_SEL", + 5, + 2 + ], + [ + "OPAHSM", + 7, + 1 + ], + [ + "OPAINTOEN", + 8, + 1 + ], + [ + "CALON", + 11, + 1 + ], + [ + "CALSEL", + 12, + 2 + ], + [ + "PGA_GAIN", + 14, + 5 + ], + [ + "TRIMOFFSETP", + 19, + 5 + ], + [ + "TRIMOFFSETN", + 24, + 5 + ], + [ + "CALOUT", + 30, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "OPAMP4_CSR", + "offset": "0x0C", + "fields": [ + [ + "OPAEN", + 0, + 1 + ], + [ + "FORCE_VP", + 1, + 1 + ], + [ + "VP_SEL", + 2, + 2 + ], + [ + "USERTRIM", + 4, + 1 + ], + [ + "VM_SEL", + 5, + 2 + ], + [ + "OPAHSM", + 7, + 1 + ], + [ + "OPAINTOEN", + 8, + 1 + ], + [ + "CALON", + 11, + 1 + ], + [ + "CALSEL", + 12, + 2 + ], + [ + "PGA_GAIN", + 14, + 5 + ], + [ + "TRIMOFFSETP", + 19, + 5 + ], + [ + "TRIMOFFSETN", + 24, + 5 + ], + [ + "CALOUT", + 30, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "OPAMP5_CSR", + "offset": "0x10", + "fields": [ + [ + "OPAEN", + 0, + 1 + ], + [ + "FORCE_VP", + 1, + 1 + ], + [ + "VP_SEL", + 2, + 2 + ], + [ + "USERTRIM", + 4, + 1 + ], + [ + "VM_SEL", + 5, + 2 + ], + [ + "OPAHSM", + 7, + 1 + ], + [ + "OPAINTOEN", + 8, + 1 + ], + [ + "CALON", + 11, + 1 + ], + [ + "CALSEL", + 12, + 2 + ], + [ + "PGA_GAIN", + 14, + 5 + ], + [ + "TRIMOFFSETP", + 19, + 5 + ], + [ + "TRIMOFFSETN", + 24, + 5 + ], + [ + "CALOUT", + 30, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "OPAMP6_CSR", + "offset": "0x14", + "fields": [ + [ + "OPAEN", + 0, + 1 + ], + [ + "FORCE_VP", + 1, + 1 + ], + [ + "VP_SEL", + 2, + 2 + ], + [ + "USERTRIM", + 4, + 1 + ], + [ + "VM_SEL", + 5, + 2 + ], + [ + "OPAHSM", + 7, + 1 + ], + [ + "OPAINTOEN", + 8, + 1 + ], + [ + "CALON", + 11, + 1 + ], + [ + "CALSEL", + 12, + 2 + ], + [ + "PGA_GAIN", + 14, + 5 + ], + [ + "TRIMOFFSETP", + 19, + 5 + ], + [ + "TRIMOFFSETN", + 24, + 5 + ], + [ + "CALOUT", + 30, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "OPAMP1_TCMR", + "offset": "0x18", + "fields": [ + [ + "VMS_SEL", + 0, + 1 + ], + [ + "VPS_SEL", + 1, + 2 + ], + [ + "T1CM_EN", + 3, + 1 + ], + [ + "T8CM_EN", + 4, + 1 + ], + [ + "T20CM_EN", + 5, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "OPAMP2_TCMR", + "offset": "0x1C", + "fields": [ + [ + "VMS_SEL", + 0, + 1 + ], + [ + "VPS_SEL", + 1, + 2 + ], + [ + "T1CM_EN", + 3, + 1 + ], + [ + "T8CM_EN", + 4, + 1 + ], + [ + "T20CM_EN", + 5, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "OPAMP3_TCMR", + "offset": "0x20", + "fields": [ + [ + "VMS_SEL", + 0, + 1 + ], + [ + "VPS_SEL", + 1, + 2 + ], + [ + "T1CM_EN", + 3, + 1 + ], + [ + "T8CM_EN", + 4, + 1 + ], + [ + "T20CM_EN", + 5, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "OPAMP4_TCMR", + "offset": "0x24", + "fields": [ + [ + "VMS_SEL", + 0, + 1 + ], + [ + "VPS_SEL", + 1, + 2 + ], + [ + "T1CM_EN", + 3, + 1 + ], + [ + "T8CM_EN", + 4, + 1 + ], + [ + "T20CM_EN", + 5, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "OPAMP5_TCMR", + "offset": "0x28", + "fields": [ + [ + "VMS_SEL", + 0, + 1 + ], + [ + "VPS_SEL", + 1, + 2 + ], + [ + "T1CM_EN", + 3, + 1 + ], + [ + "T8CM_EN", + 4, + 1 + ], + [ + "T20CM_EN", + 5, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "OPAMP6_TCMR", + "offset": "0x2C", + "fields": [ + [ + "VMS_SEL", + 0, + 1 + ], + [ + "VPS_SEL", + 1, + 2 + ], + [ + "T1CM_EN", + 3, + 1 + ], + [ + "T8CM_EN", + 4, + 1 + ], + [ + "T20CM_EN", + 5, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + } + ] + }, + { + "name": "EXTI", + "base": "0x40010400", + "interrupts": [ + "EXTI0", + "EXTI1", + "EXTI2", + "EXTI3", + "EXTI4", + "EXTI9_5", + "EXTI15_10" + ], + "registers": [ + { + "name": "IMR1", + "offset": "0x00", + "reset": "0x1F840000", + "fields": [ + [ + "IM0", + 0, + 1 + ], + [ + "IM1", + 1, + 1 + ], + [ + "IM2", + 2, + 1 + ], + [ + "IM3", + 3, + 1 + ], + [ + "IM4", + 4, + 1 + ], + [ + "IM5", + 5, + 1 + ], + [ + "IM6", + 6, + 1 + ], + [ + "IM7", + 7, + 1 + ], + [ + "IM8", + 8, + 1 + ], + [ + "IM9", + 9, + 1 + ], + [ + "IM10", + 10, + 1 + ], + [ + "IM11", + 11, + 1 + ], + [ + "IM12", + 12, + 1 + ], + [ + "IM13", + 13, + 1 + ], + [ + "IM14", + 14, + 1 + ], + [ + "IM15", + 15, + 1 + ], + [ + "IM16", + 16, + 1 + ], + [ + "IM17", + 17, + 1 + ], + [ + "IM18", + 18, + 1 + ], + [ + "IM19", + 19, + 1 + ], + [ + "IM20", + 20, + 1 + ], + [ + "IM21", + 21, + 1 + ], + [ + "IM22", + 22, + 1 + ], + [ + "IM23", + 23, + 1 + ], + [ + "IM24", + 24, + 1 + ], + [ + "IM25", + 25, + 1 + ], + [ + "IM26", + 26, + 1 + ], + [ + "IM27", + 27, + 1 + ], + [ + "IM28", + 28, + 1 + ], + [ + "IM29", + 29, + 1 + ], + [ + "IM30", + 30, + 1 + ], + [ + "IM31", + 31, + 1 + ] + ] + }, + { + "name": "EMR1", + "offset": "0x04", + "fields": [ + [ + "EM0", + 0, + 1 + ], + [ + "EM1", + 1, + 1 + ], + [ + "EM2", + 2, + 1 + ], + [ + "EM3", + 3, + 1 + ], + [ + "EM4", + 4, + 1 + ], + [ + "EM5", + 5, + 1 + ], + [ + "EM6", + 6, + 1 + ], + [ + "EM7", + 7, + 1 + ], + [ + "EM8", + 8, + 1 + ], + [ + "EM9", + 9, + 1 + ], + [ + "EM10", + 10, + 1 + ], + [ + "EM11", + 11, + 1 + ], + [ + "EM12", + 12, + 1 + ], + [ + "EM13", + 13, + 1 + ], + [ + "EM14", + 14, + 1 + ], + [ + "EM15", + 15, + 1 + ], + [ + "EM16", + 16, + 1 + ], + [ + "EM17", + 17, + 1 + ], + [ + "EM18", + 18, + 1 + ], + [ + "EM19", + 19, + 1 + ], + [ + "EM20", + 20, + 1 + ], + [ + "EM21", + 21, + 1 + ], + [ + "EM22", + 22, + 1 + ], + [ + "EM23", + 23, + 1 + ], + [ + "EM24", + 24, + 1 + ], + [ + "EM25", + 25, + 1 + ], + [ + "EM26", + 26, + 1 + ], + [ + "EM27", + 27, + 1 + ], + [ + "EM28", + 28, + 1 + ], + [ + "EM29", + 29, + 1 + ], + [ + "EM30", + 30, + 1 + ], + [ + "EM31", + 31, + 1 + ] + ] + }, + { + "name": "RTSR1", + "offset": "0x08", + "fields": [ + [ + "RT0", + 0, + 1 + ], + [ + "RT1", + 1, + 1 + ], + [ + "RT2", + 2, + 1 + ], + [ + "RT3", + 3, + 1 + ], + [ + "RT4", + 4, + 1 + ], + [ + "RT5", + 5, + 1 + ], + [ + "RT6", + 6, + 1 + ], + [ + "RT7", + 7, + 1 + ], + [ + "RT8", + 8, + 1 + ], + [ + "RT9", + 9, + 1 + ], + [ + "RT10", + 10, + 1 + ], + [ + "RT11", + 11, + 1 + ], + [ + "RT12", + 12, + 1 + ], + [ + "RT13", + 13, + 1 + ], + [ + "RT14", + 14, + 1 + ], + [ + "RT15", + 15, + 1 + ], + [ + "RT16", + 16, + 1 + ], + [ + "RT18", + 18, + 1 + ], + [ + "RT19", + 19, + 1 + ], + [ + "RT20", + 20, + 1 + ], + [ + "RT21", + 21, + 1 + ], + [ + "RT22", + 22, + 1 + ], + [ + "RT", + 29, + 3 + ] + ] + }, + { + "name": "FTSR1", + "offset": "0x0C", + "fields": [ + [ + "FT0", + 0, + 1 + ], + [ + "FT1", + 1, + 1 + ], + [ + "FT2", + 2, + 1 + ], + [ + "FT3", + 3, + 1 + ], + [ + "FT4", + 4, + 1 + ], + [ + "FT5", + 5, + 1 + ], + [ + "FT6", + 6, + 1 + ], + [ + "FT7", + 7, + 1 + ], + [ + "FT8", + 8, + 1 + ], + [ + "FT9", + 9, + 1 + ], + [ + "FT10", + 10, + 1 + ], + [ + "FT11", + 11, + 1 + ], + [ + "FT12", + 12, + 1 + ], + [ + "FT13", + 13, + 1 + ], + [ + "FT14", + 14, + 1 + ], + [ + "FT15", + 15, + 1 + ], + [ + "FT16", + 16, + 1 + ], + [ + "FT18", + 18, + 1 + ], + [ + "FT19", + 19, + 1 + ], + [ + "FT20", + 20, + 1 + ], + [ + "FT21", + 21, + 1 + ], + [ + "FT22", + 22, + 1 + ] + ] + }, + { + "name": "SWIER1", + "offset": "0x10", + "fields": [ + [ + "SWI0", + 0, + 1 + ], + [ + "SWI1", + 1, + 1 + ], + [ + "SWI2", + 2, + 1 + ], + [ + "SWI3", + 3, + 1 + ], + [ + "SWI4", + 4, + 1 + ], + [ + "SWI5", + 5, + 1 + ], + [ + "SWI6", + 6, + 1 + ], + [ + "SWI7", + 7, + 1 + ], + [ + "SWI8", + 8, + 1 + ], + [ + "SWI9", + 9, + 1 + ], + [ + "SWI10", + 10, + 1 + ], + [ + "SWI11", + 11, + 1 + ], + [ + "SWI12", + 12, + 1 + ], + [ + "SWI13", + 13, + 1 + ], + [ + "SWI14", + 14, + 1 + ], + [ + "SWI15", + 15, + 1 + ], + [ + "SWI16", + 16, + 1 + ], + [ + "SWI18", + 18, + 1 + ], + [ + "SWI19", + 19, + 1 + ], + [ + "SWI20", + 20, + 1 + ], + [ + "SWI21", + 21, + 1 + ], + [ + "SWI22", + 22, + 1 + ] + ] + }, + { + "name": "PR1", + "offset": "0x14", + "fields": [ + [ + "PIF0", + 0, + 1 + ], + [ + "PIF1", + 1, + 1 + ], + [ + "PIF2", + 2, + 1 + ], + [ + "PIF3", + 3, + 1 + ], + [ + "PIF4", + 4, + 1 + ], + [ + "PIF5", + 5, + 1 + ], + [ + "PIF6", + 6, + 1 + ], + [ + "PIF7", + 7, + 1 + ], + [ + "PIF8", + 8, + 1 + ], + [ + "PIF9", + 9, + 1 + ], + [ + "PIF10", + 10, + 1 + ], + [ + "PIF11", + 11, + 1 + ], + [ + "PIF12", + 12, + 1 + ], + [ + "PIF13", + 13, + 1 + ], + [ + "PIF14", + 14, + 1 + ], + [ + "PIF15", + 15, + 1 + ], + [ + "PIF16", + 16, + 1 + ], + [ + "PIF17", + 17, + 1 + ], + [ + "PIF18", + 18, + 1 + ], + [ + "PIF19", + 19, + 1 + ], + [ + "PIF20", + 20, + 1 + ], + [ + "PIF21", + 21, + 1 + ], + [ + "PIF22", + 22, + 1 + ], + [ + "PIF29", + 29, + 1 + ], + [ + "PIF30", + 30, + 1 + ], + [ + "PIF31", + 31, + 1 + ] + ] + }, + { + "name": "IMR2", + "offset": "0x20", + "reset": "0x00000C3C", + "fields": [ + [ + "IM32", + 0, + 1 + ], + [ + "IM33", + 1, + 1 + ], + [ + "IM34", + 2, + 1 + ], + [ + "IM35", + 3, + 1 + ], + [ + "IM36", + 4, + 1 + ], + [ + "IM37", + 5, + 1 + ], + [ + "IM38", + 6, + 1 + ], + [ + "IM39", + 7, + 1 + ], + [ + "IM40", + 8, + 1 + ], + [ + "IM41", + 9, + 1 + ], + [ + "IM42", + 10, + 1 + ], + [ + "IM43", + 11, + 1 + ] + ] + }, + { + "name": "EMR2", + "offset": "0x24", + "fields": [ + [ + "EM32", + 0, + 1 + ], + [ + "EM33", + 1, + 1 + ], + [ + "EM34", + 2, + 1 + ], + [ + "EM35", + 3, + 1 + ], + [ + "EM36", + 4, + 1 + ], + [ + "EM37", + 5, + 1 + ], + [ + "EM38", + 6, + 1 + ], + [ + "EM39", + 7, + 1 + ], + [ + "EM40", + 8, + 1 + ] + ] + }, + { + "name": "RTSR2", + "offset": "0x28", + "fields": [ + [ + "RT32", + 0, + 1 + ], + [ + "RT33", + 1, + 1 + ], + [ + "RT38", + 6, + 1 + ], + [ + "RT39", + 7, + 1 + ], + [ + "RT40", + 8, + 1 + ], + [ + "RT41", + 9, + 1 + ] + ] + }, + { + "name": "FTSR2", + "offset": "0x2C", + "fields": [ + [ + "FT35", + 3, + 1 + ], + [ + "FT36", + 4, + 1 + ], + [ + "FT37", + 5, + 1 + ], + [ + "FT38", + 6, + 1 + ] + ] + }, + { + "name": "SWIER2", + "offset": "0x30", + "fields": [ + [ + "SWI35", + 3, + 1 + ], + [ + "SWI36", + 4, + 1 + ], + [ + "SWI37", + 5, + 1 + ], + [ + "SWI38", + 6, + 1 + ] + ] + }, + { + "name": "PR2", + "offset": "0x34", + "fields": [ + [ + "PIF35", + 3, + 1 + ], + [ + "PIF36", + 4, + 1 + ], + [ + "PIF37", + 5, + 1 + ], + [ + "PIF38", + 6, + 1 + ] + ] + } + ] + }, + { + "name": "TIM1", + "base": "0x40012C00", + "interrupts": [ + "TIM1_BRK_TIM15", + "TIM1_UP_TIM16", + "TIM1_TRG_COM", + "TIM1_CC" + ], + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "size": 16, + "fields": [ + [ + "CEN", + 0, + 1 + ], + [ + "UDIS", + 1, + 1 + ], + [ + "URS", + 2, + 1 + ], + [ + "OPM", + 3, + 1 + ], + [ + "DIR", + 4, + 1 + ], + [ + "CMS", + 5, + 2 + ], + [ + "ARPE", + 7, + 1 + ], + [ + "CKD", + 8, + 2 + ], + [ + "UIFREMAP", + 11, + 1 + ], + [ + "DITHEN", + 12, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "fields": [ + [ + "CCPC", + 0, + 1 + ], + [ + "CCUS", + 2, + 1 + ], + [ + "CCDS", + 3, + 1 + ], + [ + "MMS", + 4, + 3 + ], + [ + "TI1S", + 7, + 1 + ], + [ + "OIS1", + 8, + 1 + ], + [ + "OIS1N", + 9, + 1 + ], + [ + "OIS2", + 10, + 1 + ], + [ + "OIS2N", + 11, + 1 + ], + [ + "OIS3", + 12, + 1 + ], + [ + "OIS3N", + 13, + 1 + ], + [ + "OIS4", + 14, + 1 + ], + [ + "OIS4N", + 15, + 1 + ], + [ + "OIS5", + 16, + 1 + ], + [ + "OIS6", + 18, + 1 + ], + [ + "MMS2", + 20, + 4 + ], + [ + "MMS_1", + 25, + 1 + ] + ] + }, + { + "name": "SMCR", + "offset": "0x08", + "fields": [ + [ + "SMS", + 0, + 3 + ], + [ + "OCCS", + 3, + 1 + ], + [ + "TS", + 4, + 3 + ], + [ + "MSM", + 7, + 1 + ], + [ + "ETF", + 8, + 4 + ], + [ + "ETPS", + 12, + 2 + ], + [ + "ECE", + 14, + 1 + ], + [ + "ETP", + 15, + 1 + ], + [ + "SMS_1", + 16, + 1 + ], + [ + "TS_1", + 20, + 2 + ], + [ + "SMSPE", + 24, + 1 + ], + [ + "SMSPS", + 25, + 1 + ] + ] + }, + { + "name": "DIER", + "offset": "0x0C", + "fields": [ + [ + "UIE", + 0, + 1 + ], + [ + "CC1IE", + 1, + 1 + ], + [ + "CC2IE", + 2, + 1 + ], + [ + "CC3IE", + 3, + 1 + ], + [ + "CC4IE", + 4, + 1 + ], + [ + "COMIE", + 5, + 1 + ], + [ + "TIE", + 6, + 1 + ], + [ + "BIE", + 7, + 1 + ], + [ + "UDE", + 8, + 1 + ], + [ + "CC1DE", + 9, + 1 + ], + [ + "CC2DE", + 10, + 1 + ], + [ + "CC3DE", + 11, + 1 + ], + [ + "CC4DE", + 12, + 1 + ], + [ + "COMDE", + 13, + 1 + ], + [ + "TDE", + 14, + 1 + ], + [ + "IDXIE", + 20, + 1 + ], + [ + "DIRIE", + 21, + 1 + ], + [ + "IERRIE", + 22, + 1 + ], + [ + "TERRIE", + 23, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x10", + "fields": [ + [ + "UIF", + 0, + 1 + ], + [ + "CC1IF", + 1, + 1 + ], + [ + "CC2IF", + 2, + 1 + ], + [ + "CC3IF", + 3, + 1 + ], + [ + "CC4IF", + 4, + 1 + ], + [ + "COMIF", + 5, + 1 + ], + [ + "TIF", + 6, + 1 + ], + [ + "BIF", + 7, + 1 + ], + [ + "B2IF", + 8, + 1 + ], + [ + "CC1OF", + 9, + 1 + ], + [ + "CC2OF", + 10, + 1 + ], + [ + "CC3OF", + 11, + 1 + ], + [ + "CC4OF", + 12, + 1 + ], + [ + "SBIF", + 13, + 1 + ], + [ + "CC5IF", + 16, + 1 + ], + [ + "CC6IF", + 17, + 1 + ], + [ + "IDXF", + 20, + 1 + ], + [ + "DIRF", + 21, + 1 + ], + [ + "IERRF", + 22, + 1 + ], + [ + "TERRF", + 23, + 1 + ] + ] + }, + { + "name": "EGR", + "offset": "0x14", + "size": 16, + "fields": [ + [ + "UG", + 0, + 1, + "w" + ], + [ + "CC1G", + 1, + 1, + "w" + ], + [ + "CC2G", + 2, + 1, + "w" + ], + [ + "CC3G", + 3, + 1, + "w" + ], + [ + "CC4G", + 4, + 1, + "w" + ], + [ + "COMG", + 5, + 1, + "w" + ], + [ + "TG", + 6, + 1, + "w" + ], + [ + "BG", + 7, + 1, + "w" + ], + [ + "B2G", + 8, + 1, + "w" + ] + ] + }, + { + "name": "CCMR1", + "offset": "0x18", + "fields": [ + [ + "OC2M_3", + 24, + 1 + ], + [ + "OC1M_3", + 16, + 1 + ], + [ + "IC2F", + 12, + 4 + ], + [ + "IC2PSC", + 10, + 2 + ], + [ + "CC2S", + 8, + 2 + ], + [ + "IC1F", + 4, + 4 + ], + [ + "IC1PSC", + 2, + 2 + ], + [ + "CC1S", + 0, + 2 + ] + ] + }, + { + "name": "CCMR2", + "offset": "0x1C", + "fields": [ + [ + "OC4M_3", + 24, + 1 + ], + [ + "OC3M_3", + 16, + 1 + ], + [ + "IC4F", + 12, + 4 + ], + [ + "IC4PSC", + 10, + 2 + ], + [ + "CC4S", + 8, + 2 + ], + [ + "IC3F", + 4, + 4 + ], + [ + "IC3PSC", + 2, + 2 + ], + [ + "CC3S", + 0, + 2 + ] + ] + }, + { + "name": "CCER", + "offset": "0x20", + "fields": [ + [ + "CC1E", + 0, + 1 + ], + [ + "CC1P", + 1, + 1 + ], + [ + "CC1NE", + 2, + 1 + ], + [ + "CC1NP", + 3, + 1 + ], + [ + "CC2E", + 4, + 1 + ], + [ + "CC2P", + 5, + 1 + ], + [ + "CC2NE", + 6, + 1 + ], + [ + "CC2NP", + 7, + 1 + ], + [ + "CC3E", + 8, + 1 + ], + [ + "CC3P", + 9, + 1 + ], + [ + "CC3NE", + 10, + 1 + ], + [ + "CC3NP", + 11, + 1 + ], + [ + "CC4E", + 12, + 1 + ], + [ + "CC4P", + 13, + 1 + ], + [ + "CC4NE", + 14, + 1 + ], + [ + "CC4NP", + 15, + 1 + ], + [ + "CC5E", + 16, + 1 + ], + [ + "CC5P", + 17, + 1 + ], + [ + "CC6E", + 20, + 1 + ], + [ + "CC6P", + 21, + 1 + ] + ] + }, + { + "name": "CNT", + "offset": "0x24", + "fields": [ + [ + "CNT", + 0, + 16 + ], + [ + "UIFCPY", + 31, + 1, + "r" + ] + ] + }, + { + "name": "PSC", + "offset": "0x28", + "size": 16, + "fields": [ + [ + "PSC", + 0, + 16 + ] + ] + }, + { + "name": "ARR", + "offset": "0x2C", + "reset": "0x0000FFFF", + "fields": [ + [ + "ARR", + 0, + 20 + ] + ] + }, + { + "name": "RCR", + "offset": "0x30", + "size": 16, + "fields": [ + [ + "REP", + 0, + 16 + ] + ] + }, + { + "name": "CCR1", + "offset": "0x34", + "fields": [ + [ + "CCR1", + 0, + 20 + ] + ] + }, + { + "name": "CCR2", + "offset": "0x38", + "fields": [ + [ + "CCR2", + 0, + 20 + ] + ] + }, + { + "name": "CCR3", + "offset": "0x3C", + "fields": [ + [ + "CCR3", + 0, + 20 + ] + ] + }, + { + "name": "CCR4", + "offset": "0x40", + "fields": [ + [ + "CCR4", + 0, + 20 + ] + ] + }, + { + "name": "BDTR", + "offset": "0x44", + "fields": [ + [ + "DTG", + 0, + 8 + ], + [ + "LOCK", + 8, + 2 + ], + [ + "OSSI", + 10, + 1 + ], + [ + "OSSR", + 11, + 1 + ], + [ + "BKE", + 12, + 1 + ], + [ + "BKP", + 13, + 1 + ], + [ + "AOE", + 14, + 1 + ], + [ + "MOE", + 15, + 1 + ], + [ + "BKF", + 16, + 4 + ], + [ + "BK2F", + 20, + 4 + ], + [ + "BK2E", + 24, + 1 + ], + [ + "BK2P", + 25, + 1 + ], + [ + "BKDSRM", + 26, + 1 + ], + [ + "BK2DSRM", + 27, + 1 + ], + [ + "BKBID", + 28, + 1 + ], + [ + "BK2BID", + 29, + 1 + ] + ] + }, + { + "name": "CCR5", + "offset": "0x48", + "fields": [ + [ + "CCR5", + 0, + 20 + ], + [ + "GC5C1", + 29, + 1 + ], + [ + "GC5C2", + 30, + 1 + ], + [ + "GC5C3", + 31, + 1 + ] + ] + }, + { + "name": "CCR6", + "offset": "0x4C", + "fields": [ + [ + "CCR6", + 0, + 20 + ] + ] + }, + { + "name": "CCMR3", + "offset": "0x50", + "fields": [ + [ + "OC5FE", + 2, + 1 + ], + [ + "OC5PE", + 3, + 1 + ], + [ + "OC5M", + 4, + 3 + ], + [ + "OC5CE", + 7, + 1 + ], + [ + "OC6FE", + 10, + 1 + ], + [ + "OC6PE", + 11, + 1 + ], + [ + "OC6M", + 12, + 3 + ], + [ + "OC6CE", + 15, + 1 + ], + [ + "OC5M_1", + 16, + 1 + ], + [ + "OC6M_1", + 24, + 1 + ] + ] + }, + { + "name": "DTR2", + "offset": "0x54", + "fields": [ + [ + "DTGF", + 0, + 8 + ], + [ + "DTAE", + 16, + 1 + ], + [ + "DTPE", + 17, + 1 + ] + ] + }, + { + "name": "ECR", + "offset": "0x58", + "fields": [ + [ + "IE", + 0, + 1 + ], + [ + "IDIR", + 1, + 2 + ], + [ + "FIDX", + 5, + 1 + ], + [ + "IPOS", + 6, + 2 + ], + [ + "PW", + 16, + 8 + ], + [ + "PWPRSC", + 24, + 3 + ] + ] + }, + { + "name": "TISEL", + "offset": "0x5C", + "fields": [ + [ + "TI1SEL", + 0, + 4 + ], + [ + "TI2SEL", + 8, + 4 + ], + [ + "TI3SEL", + 16, + 4 + ], + [ + "TI4SEL", + 24, + 4 + ] + ] + }, + { + "name": "AF1", + "offset": "0x60", + "reset": "0x00000001", + "fields": [ + [ + "BKINE", + 0, + 1 + ], + [ + "BKCMP1E", + 1, + 1 + ], + [ + "BKCMP2E", + 2, + 1 + ], + [ + "BKCMP3E", + 3, + 1 + ], + [ + "BKCMP4E", + 4, + 1 + ], + [ + "BKCMP5E", + 5, + 1 + ], + [ + "BKCMP6E", + 6, + 1 + ], + [ + "BKCMP7E", + 7, + 1 + ], + [ + "BKCMP8E", + 8, + 1 + ], + [ + "BKINP", + 9, + 1 + ], + [ + "BKCMP1P", + 10, + 1 + ], + [ + "BKCMP2P", + 11, + 1 + ], + [ + "BKCMP3P", + 12, + 1 + ], + [ + "BKCMP4P", + 13, + 1 + ], + [ + "ETRSEL", + 14, + 4 + ] + ] + }, + { + "name": "AF2", + "offset": "0x64", + "reset": "0x00000001", + "fields": [ + [ + "BK2INE", + 0, + 1 + ], + [ + "BK2CMP1E", + 1, + 1 + ], + [ + "BK2CMP2E", + 2, + 1 + ], + [ + "BK2CMP3E", + 3, + 1 + ], + [ + "BK2CMP4E", + 4, + 1 + ], + [ + "BK2CMP5E", + 5, + 1 + ], + [ + "BK2CMP6E", + 6, + 1 + ], + [ + "BK2CMP7E", + 7, + 1 + ], + [ + "BK2CMP8E", + 8, + 1 + ], + [ + "BK2INP", + 9, + 1 + ], + [ + "BK2CMP1P", + 10, + 1 + ], + [ + "BK2CMP2P", + 11, + 1 + ], + [ + "BK2CMP3P", + 12, + 1 + ], + [ + "BK2CMP4P", + 13, + 1 + ], + [ + "OCRSEL", + 16, + 3 + ] + ] + }, + { + "name": "DCR", + "offset": "0x3DC", + "fields": [ + [ + "DBA", + 0, + 5 + ], + [ + "DBL", + 8, + 5 + ] + ] + }, + { + "name": "DMAR", + "offset": "0x3E0", + "fields": [ + [ + "DMAB", + 0, + 32 + ] + ] + } + ] + }, + { + "name": "SPI1", + "base": "0x40013000", + "interrupts": [ + "SPI1" + ], + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "fields": [ + [ + "BIDIMODE", + 15, + 1 + ], + [ + "BIDIOE", + 14, + 1 + ], + [ + "CRCEN", + 13, + 1 + ], + [ + "CRCNEXT", + 12, + 1 + ], + [ + "DFF", + 11, + 1 + ], + [ + "RXONLY", + 10, + 1 + ], + [ + "SSM", + 9, + 1 + ], + [ + "SSI", + 8, + 1 + ], + [ + "LSBFIRST", + 7, + 1 + ], + [ + "SPE", + 6, + 1 + ], + [ + "BR", + 3, + 3 + ], + [ + "MSTR", + 2, + 1 + ], + [ + "CPOL", + 1, + 1 + ], + [ + "CPHA", + 0, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "reset": "0x00000700", + "fields": [ + [ + "RXDMAEN", + 0, + 1 + ], + [ + "TXDMAEN", + 1, + 1 + ], + [ + "SSOE", + 2, + 1 + ], + [ + "NSSP", + 3, + 1 + ], + [ + "FRF", + 4, + 1 + ], + [ + "ERRIE", + 5, + 1 + ], + [ + "RXNEIE", + 6, + 1 + ], + [ + "TXEIE", + 7, + 1 + ], + [ + "DS", + 8, + 4 + ], + [ + "FRXTH", + 12, + 1 + ], + [ + "LDMA_RX", + 13, + 1 + ], + [ + "LDMA_TX", + 14, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x08", + "reset": "0x00000002", + "fields": [ + [ + "RXNE", + 0, + 1, + "r" + ], + [ + "TXE", + 1, + 1, + "r" + ], + [ + "CRCERR", + 4, + 1 + ], + [ + "MODF", + 5, + 1, + "r" + ], + [ + "OVR", + 6, + 1, + "r" + ], + [ + "BSY", + 7, + 1, + "r" + ], + [ + "TIFRFE", + 8, + 1, + "r" + ], + [ + "FRLVL", + 9, + 2, + "r" + ], + [ + "FTLVL", + 11, + 2, + "r" + ] + ] + }, + { + "name": "DR", + "offset": "0x0C", + "fields": [ + [ + "DR", + 0, + 16 + ] + ] + }, + { + "name": "CRCPR", + "offset": "0x10", + "reset": "0x00000007", + "fields": [ + [ + "CRCPOLY", + 0, + 16 + ] + ] + }, + { + "name": "RXCRCR", + "offset": "0x14", + "fields": [ + [ + "RxCRC", + 0, + 16, + "r" + ] + ] + }, + { + "name": "TXCRCR", + "offset": "0x18", + "fields": [ + [ + "TxCRC", + 0, + 16, + "r" + ] + ] + }, + { + "name": "I2SCFGR", + "offset": "0x1C", + "fields": [ + [ + "CHLEN", + 0, + 1 + ], + [ + "DATLEN", + 1, + 2 + ], + [ + "CKPOL", + 3, + 1 + ], + [ + "I2SSTD", + 4, + 2 + ], + [ + "PCMSYNC", + 7, + 1 + ], + [ + "I2SCFG", + 8, + 2 + ], + [ + "I2SE", + 10, + 1 + ], + [ + "I2SMOD", + 11, + 1 + ] + ] + }, + { + "name": "I2SPR", + "offset": "0x20", + "reset": "0x00000002", + "fields": [ + [ + "I2SDIV", + 0, + 8 + ], + [ + "ODD", + 8, + 1 + ], + [ + "MCKOE", + 9, + 1 + ] + ] + } + ] + }, + { + "name": "TIM8", + "base": "0x40013400", + "interrupts": [ + "TIM8_BRK", + "TIM8_UP", + "TIM8_TRG_COM", + "TIM8_CC" + ], + "derived_from": "TIM1" + }, + { + "name": "USART1", + "base": "0x40013800", + "interrupts": [ + "USART1" + ], + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "fields": [ + [ + "RXFFIE", + 31, + 1 + ], + [ + "TXFEIE", + 30, + 1 + ], + [ + "FIFOEN", + 29, + 1 + ], + [ + "M1", + 28, + 1 + ], + [ + "EOBIE", + 27, + 1 + ], + [ + "RTOIE", + 26, + 1 + ], + [ + "DEAT4", + 25, + 1 + ], + [ + "DEAT3", + 24, + 1 + ], + [ + "DEAT2", + 23, + 1 + ], + [ + "DEAT1", + 22, + 1 + ], + [ + "DEAT0", + 21, + 1 + ], + [ + "DEDT4", + 20, + 1 + ], + [ + "DEDT3", + 19, + 1 + ], + [ + "DEDT2", + 18, + 1 + ], + [ + "DEDT1", + 17, + 1 + ], + [ + "DEDT0", + 16, + 1 + ], + [ + "OVER8", + 15, + 1 + ], + [ + "CMIE", + 14, + 1 + ], + [ + "MME", + 13, + 1 + ], + [ + "M0", + 12, + 1 + ], + [ + "WAKE", + 11, + 1 + ], + [ + "PCE", + 10, + 1 + ], + [ + "PS", + 9, + 1 + ], + [ + "PEIE", + 8, + 1 + ], + [ + "TXEIE", + 7, + 1 + ], + [ + "TCIE", + 6, + 1 + ], + [ + "RXNEIE", + 5, + 1 + ], + [ + "IDLEIE", + 4, + 1 + ], + [ + "TE", + 3, + 1 + ], + [ + "RE", + 2, + 1 + ], + [ + "UESM", + 1, + 1 + ], + [ + "UE", + 0, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "fields": [ + [ + "ADD4_7", + 28, + 4 + ], + [ + "ADD0_3", + 24, + 4 + ], + [ + "RTOEN", + 23, + 1 + ], + [ + "ABRMOD1", + 22, + 1 + ], + [ + "ABRMOD0", + 21, + 1 + ], + [ + "ABREN", + 20, + 1 + ], + [ + "MSBFIRST", + 19, + 1 + ], + [ + "TAINV", + 18, + 1 + ], + [ + "TXINV", + 17, + 1 + ], + [ + "RXINV", + 16, + 1 + ], + [ + "SWAP", + 15, + 1 + ], + [ + "LINEN", + 14, + 1 + ], + [ + "STOP", + 12, + 2 + ], + [ + "CLKEN", + 11, + 1 + ], + [ + "CPOL", + 10, + 1 + ], + [ + "CPHA", + 9, + 1 + ], + [ + "LBCL", + 8, + 1 + ], + [ + "LBDIE", + 6, + 1 + ], + [ + "LBDL", + 5, + 1 + ], + [ + "ADDM7", + 4, + 1 + ], + [ + "DIS_NSS", + 3, + 1 + ], + [ + "SLVEN", + 0, + 1 + ] + ] + }, + { + "name": "CR3", + "offset": "0x08", + "fields": [ + [ + "TXFTCFG", + 29, + 3 + ], + [ + "RXFTIE", + 28, + 1 + ], + [ + "RXFTCFG", + 25, + 3 + ], + [ + "TCBGTIE", + 24, + 1 + ], + [ + "TXFTIE", + 23, + 1 + ], + [ + "WUFIE", + 22, + 1 + ], + [ + "WUS", + 20, + 2 + ], + [ + "SCARCNT", + 17, + 3 + ], + [ + "DEP", + 15, + 1 + ], + [ + "DEM", + 14, + 1 + ], + [ + "DDRE", + 13, + 1 + ], + [ + "OVRDIS", + 12, + 1 + ], + [ + "ONEBIT", + 11, + 1 + ], + [ + "CTSIE", + 10, + 1 + ], + [ + "CTSE", + 9, + 1 + ], + [ + "RTSE", + 8, + 1 + ], + [ + "DMAT", + 7, + 1 + ], + [ + "DMAR", + 6, + 1 + ], + [ + "SCEN", + 5, + 1 + ], + [ + "NACK", + 4, + 1 + ], + [ + "HDSEL", + 3, + 1 + ], + [ + "IRLP", + 2, + 1 + ], + [ + "IREN", + 1, + 1 + ], + [ + "EIE", + 0, + 1 + ] + ] + }, + { + "name": "BRR", + "offset": "0x0C", + "fields": [ + [ + "DIV_Mantissa", + 4, + 12 + ], + [ + "DIV_Fraction", + 0, + 4 + ] + ] + }, + { + "name": "GTPR", + "offset": "0x10", + "fields": [ + [ + "GT", + 8, + 8 + ], + [ + "PSC", + 0, + 8 + ] + ] + }, + { + "name": "RTOR", + "offset": "0x14", + "fields": [ + [ + "BLEN", + 24, + 8 + ], + [ + "RTO", + 0, + 24 + ] + ] + }, + { + "name": "RQR", + "offset": "0x18", + "fields": [ + [ + "TXFRQ", + 4, + 1, + "w" + ], + [ + "RXFRQ", + 3, + 1, + "w" + ], + [ + "MMRQ", + 2, + 1, + "w" + ], + [ + "SBKRQ", + 1, + 1, + "w" + ], + [ + "ABRRQ", + 0, + 1, + "w" + ] + ] + }, + { + "name": "ISR", + "offset": "0x1C", + "fields": [ + [ + "TXFT", + 27, + 1, + "r" + ], + [ + "RXFT", + 26, + 1, + "r" + ], + [ + "TCBGT", + 25, + 1, + "r" + ], + [ + "RXFF", + 24, + 1, + "r" + ], + [ + "TXFE", + 23, + 1, + "r" + ], + [ + "REACK", + 22, + 1, + "r" + ], + [ + "TEACK", + 21, + 1, + "r" + ], + [ + "WUF", + 20, + 1, + "r" + ], + [ + "RWU", + 19, + 1, + "r" + ], + [ + "SBKF", + 18, + 1, + "r" + ], + [ + "CMF", + 17, + 1, + "r" + ], + [ + "BUSY", + 16, + 1, + "r" + ], + [ + "ABRF", + 15, + 1, + "r" + ], + [ + "ABRE", + 14, + 1, + "r" + ], + [ + "UDR", + 13, + 1, + "r" + ], + [ + "EOBF", + 12, + 1, + "r" + ], + [ + "RTOF", + 11, + 1, + "r" + ], + [ + "CTS", + 10, + 1, + "r" + ], + [ + "CTSIF", + 9, + 1, + "r" + ], + [ + "LBDF", + 8, + 1, + "r" + ], + [ + "TXE", + 7, + 1, + "r" + ], + [ + "TC", + 6, + 1, + "r" + ], + [ + "RXNE", + 5, + 1, + "r" + ], + [ + "IDLE", + 4, + 1, + "r" + ], + [ + "ORE", + 3, + 1, + "r" + ], + [ + "NF", + 2, + 1, + "r" + ], + [ + "FE", + 1, + 1, + "r" + ], + [ + "PE", + 0, + 1, + "r" + ] + ], + "reset": "0x008000C0" + }, + { + "name": "ICR", + "offset": "0x20", + "fields": [ + [ + "WUCF", + 20, + 1, + "w" + ], + [ + "CMCF", + 17, + 1, + "w" + ], + [ + "UDRCF", + 13, + 1, + "w" + ], + [ + "EOBCF", + 12, + 1, + "w" + ], + [ + "RTOCF", + 11, + 1, + "w" + ], + [ + "CTSCF", + 9, + 1, + "w" + ], + [ + "LBDCF", + 8, + 1, + "w" + ], + [ + "TCBGTCF", + 7, + 1, + "w" + ], + [ + "TCCF", + 6, + 1, + "w" + ], + [ + "TXFECF", + 5, + 1, + "w" + ], + [ + "IDLECF", + 4, + 1, + "w" + ], + [ + "ORECF", + 3, + 1, + "w" + ], + [ + "NCF", + 2, + 1, + "w" + ], + [ + "FECF", + 1, + 1, + "w" + ], + [ + "PECF", + 0, + 1, + "w" + ] + ] + }, + { + "name": "RDR", + "offset": "0x24", + "fields": [ + [ + "RDR", + 0, + 9, + "r" + ] + ] + }, + { + "name": "TDR", + "offset": "0x28", + "fields": [ + [ + "TDR", + 0, + 9 + ] + ] + }, + { + "name": "PRESC", + "offset": "0x2C", + "fields": [ + [ + "PRESCALER", + 0, + 4 + ] + ] + } + ] + }, + { + "name": "SPI4", + "base": "0x40013C00", + "interrupts": [ + "SPI4" + ], + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "reset": "0x00000700", + "fields": [ + [ + "BIDIMODE", + 15, + 1 + ], + [ + "BIDIOE", + 14, + 1 + ], + [ + "CRCEN", + 13, + 1 + ], + [ + "CRCNEXT", + 12, + 1 + ], + [ + "DFF", + 11, + 1 + ], + [ + "RXONLY", + 10, + 1 + ], + [ + "SSM", + 9, + 1 + ], + [ + "SSI", + 8, + 1 + ], + [ + "LSBFIRST", + 7, + 1 + ], + [ + "SPE", + 6, + 1 + ], + [ + "BR", + 3, + 3 + ], + [ + "MSTR", + 2, + 1 + ], + [ + "CPOL", + 1, + 1 + ], + [ + "CPHA", + 0, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "fields": [ + [ + "RXDMAEN", + 0, + 1 + ], + [ + "TXDMAEN", + 1, + 1 + ], + [ + "SSOE", + 2, + 1 + ], + [ + "NSSP", + 3, + 1 + ], + [ + "FRF", + 4, + 1 + ], + [ + "ERRIE", + 5, + 1 + ], + [ + "RXNEIE", + 6, + 1 + ], + [ + "TXEIE", + 7, + 1 + ], + [ + "DS", + 8, + 4 + ], + [ + "FRXTH", + 12, + 1 + ], + [ + "LDMA_RX", + 13, + 1 + ], + [ + "LDMA_TX", + 14, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x08", + "reset": "0x00000002", + "fields": [ + [ + "RXNE", + 0, + 1, + "r" + ], + [ + "TXE", + 1, + 1, + "r" + ], + [ + "CRCERR", + 4, + 1 + ], + [ + "MODF", + 5, + 1, + "r" + ], + [ + "OVR", + 6, + 1, + "r" + ], + [ + "BSY", + 7, + 1, + "r" + ], + [ + "TIFRFE", + 8, + 1, + "r" + ], + [ + "FRLVL", + 9, + 2, + "r" + ], + [ + "FTLVL", + 11, + 2, + "r" + ] + ] + }, + { + "name": "DR", + "offset": "0x0C", + "fields": [ + [ + "DR", + 0, + 16 + ] + ] + }, + { + "name": "CRCPR", + "offset": "0x10", + "reset": "0x00000007", + "fields": [ + [ + "CRCPOLY", + 0, + 16 + ] + ] + }, + { + "name": "RXCRCR", + "offset": "0x14", + "fields": [ + [ + "RxCRC", + 0, + 16, + "r" + ] + ] + }, + { + "name": "TXCRCR", + "offset": "0x18", + "fields": [ + [ + "TxCRC", + 0, + 16, + "r" + ] + ] + }, + { + "name": "I2SCFGR", + "offset": "0x1C", + "fields": [ + [ + "CHLEN", + 0, + 1 + ], + [ + "DATLEN", + 1, + 2 + ], + [ + "CKPOL", + 3, + 1 + ], + [ + "I2SSTD", + 4, + 2 + ], + [ + "PCMSYNC", + 7, + 1 + ], + [ + "I2SCFG", + 8, + 2 + ], + [ + "I2SE", + 10, + 1 + ], + [ + "I2SMOD", + 11, + 1 + ] + ] + }, + { + "name": "I2SPR", + "offset": "0x20", + "reset": "0x00000002", + "fields": [ + [ + "I2SDIV", + 0, + 8 + ], + [ + "ODD", + 8, + 1 + ], + [ + "MCKOE", + 9, + 1 + ] + ] + } + ] + }, + { + "name": "TIM15", + "base": "0x40014000", + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "fields": [ + [ + "CEN", + 0, + 1 + ], + [ + "UDIS", + 1, + 1 + ], + [ + "URS", + 2, + 1 + ], + [ + "OPM", + 3, + 1 + ], + [ + "ARPE", + 7, + 1 + ], + [ + "CKD", + 8, + 2 + ], + [ + "UIFREMAP", + 11, + 1 + ], + [ + "DITHEN", + 12, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "fields": [ + [ + "OIS2", + 10, + 1 + ], + [ + "OIS1N", + 9, + 1 + ], + [ + "OIS1", + 8, + 1 + ], + [ + "TI1S", + 7, + 1 + ], + [ + "MMS", + 4, + 3 + ], + [ + "CCDS", + 3, + 1 + ], + [ + "CCUS", + 2, + 1 + ], + [ + "CCPC", + 0, + 1 + ] + ] + }, + { + "name": "SMCR", + "offset": "0x08", + "fields": [ + [ + "TS_4_3", + 20, + 2 + ], + [ + "SMS_3", + 16, + 1 + ], + [ + "MSM", + 7, + 1 + ], + [ + "TS", + 4, + 3 + ], + [ + "SMS", + 0, + 3 + ] + ] + }, + { + "name": "DIER", + "offset": "0x0C", + "fields": [ + [ + "TDE", + 14, + 1 + ], + [ + "COMDE", + 13, + 1 + ], + [ + "CC2DE", + 10, + 1 + ], + [ + "CC1DE", + 9, + 1 + ], + [ + "UDE", + 8, + 1 + ], + [ + "BIE", + 7, + 1 + ], + [ + "TIE", + 6, + 1 + ], + [ + "COMIE", + 5, + 1 + ], + [ + "CC2IE", + 2, + 1 + ], + [ + "CC1IE", + 1, + 1 + ], + [ + "UIE", + 0, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x10", + "fields": [ + [ + "CC2OF", + 10, + 1 + ], + [ + "CC1OF", + 9, + 1 + ], + [ + "BIF", + 7, + 1 + ], + [ + "TIF", + 6, + 1 + ], + [ + "COMIF", + 5, + 1 + ], + [ + "CC2IF", + 2, + 1 + ], + [ + "CC1IF", + 1, + 1 + ], + [ + "UIF", + 0, + 1 + ] + ] + }, + { + "name": "EGR", + "offset": "0x14", + "fields": [ + [ + "BG", + 7, + 1, + "w" + ], + [ + "TG", + 6, + 1, + "w" + ], + [ + "COMG", + 5, + 1, + "w" + ], + [ + "CC2G", + 2, + 1, + "w" + ], + [ + "CC1G", + 1, + 1, + "w" + ], + [ + "UG", + 0, + 1, + "w" + ] + ] + }, + { + "name": "CCMR1", + "offset": "0x18", + "fields": [ + [ + "OC2M_3", + 24, + 1 + ], + [ + "OC1M_3", + 16, + 1 + ], + [ + "OC2M", + 12, + 3 + ], + [ + "OC2PE", + 11, + 1 + ], + [ + "OC2FE", + 10, + 1 + ], + [ + "CC2S", + 8, + 2 + ], + [ + "OC1CE", + 7, + 1 + ], + [ + "OC1M", + 4, + 3 + ], + [ + "OC1PE", + 3, + 1 + ], + [ + "OC1FE", + 2, + 1 + ], + [ + "CC1S", + 0, + 2 + ] + ] + }, + { + "name": "CCER", + "offset": "0x20", + "fields": [ + [ + "CC2NP", + 7, + 1 + ], + [ + "CC2P", + 5, + 1 + ], + [ + "CC2E", + 4, + 1 + ], + [ + "CC1NP", + 3, + 1 + ], + [ + "CC1NE", + 2, + 1 + ], + [ + "CC1P", + 1, + 1 + ], + [ + "CC1E", + 0, + 1 + ] + ] + }, + { + "name": "CNT", + "offset": "0x24", + "fields": [ + [ + "CNT", + 0, + 16 + ], + [ + "UIFCPY", + 31, + 1, + "r" + ] + ] + }, + { + "name": "PSC", + "offset": "0x28", + "fields": [ + [ + "PSC", + 0, + 16 + ] + ] + }, + { + "name": "ARR", + "offset": "0x2C", + "reset": "0x0000FFFF", + "fields": [ + [ + "ARR", + 0, + 16 + ] + ] + }, + { + "name": "RCR", + "offset": "0x30", + "fields": [ + [ + "REP", + 0, + 8 + ] + ] + }, + { + "name": "CCR1", + "offset": "0x34", + "fields": [ + [ + "CCR1", + 0, + 16 + ] + ] + }, + { + "name": "CCR2", + "offset": "0x38", + "fields": [ + [ + "CCR2", + 0, + 16 + ] + ] + }, + { + "name": "BDTR", + "offset": "0x44", + "fields": [ + [ + "DTG", + 0, + 8 + ], + [ + "LOCK", + 8, + 2 + ], + [ + "OSSI", + 10, + 1 + ], + [ + "OSSR", + 11, + 1 + ], + [ + "BKE", + 12, + 1 + ], + [ + "BKP", + 13, + 1 + ], + [ + "AOE", + 14, + 1 + ], + [ + "MOE", + 15, + 1 + ], + [ + "BKF", + 16, + 4 + ], + [ + "BKDSRM", + 26, + 1 + ], + [ + "BKBID", + 28, + 1 + ] + ] + }, + { + "name": "DTR2", + "offset": "0x54", + "fields": [ + [ + "DTGF", + 0, + 8 + ], + [ + "DTAE", + 16, + 1 + ], + [ + "DTPE", + 17, + 1 + ] + ] + }, + { + "name": "TISEL", + "offset": "0x5C", + "fields": [ + [ + "TI1SEL", + 0, + 4 + ], + [ + "TI2SEL", + 8, + 4 + ] + ] + }, + { + "name": "AF1", + "offset": "0x60", + "fields": [ + [ + "BKCMP4P", + 13, + 1 + ], + [ + "BKCMP3P", + 12, + 1 + ], + [ + "BKCMP2P", + 11, + 1 + ], + [ + "BKCMP1P", + 10, + 1 + ], + [ + "BKINP", + 9, + 1 + ], + [ + "BKCMP7E", + 7, + 1 + ], + [ + "BKCMP6E", + 6, + 1 + ], + [ + "BKCMP5E", + 5, + 1 + ], + [ + "BKCMP4E", + 4, + 1 + ], + [ + "BKCMP3E", + 3, + 1 + ], + [ + "BKCMP2E", + 2, + 1 + ], + [ + "BKCMP1E", + 1, + 1 + ], + [ + "BKINE", + 0, + 1 + ] + ] + }, + { + "name": "AF2", + "offset": "0x64", + "fields": [ + [ + "OCRSEL", + 16, + 3 + ] + ] + }, + { + "name": "DCR", + "offset": "0x3DC", + "fields": [ + [ + "DBL", + 8, + 5 + ], + [ + "DBA", + 0, + 5 + ] + ] + }, + { + "name": "DMAR", + "offset": "0x3E0", + "fields": [ + [ + "DMAB", + 0, + 32 + ] + ] + } + ], + "interrupts": [ + "TIM1_BRK_TIM15" + ] + }, + { + "name": "TIM16", + "base": "0x40014400", + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "size": 16, + "fields": [ + [ + "CEN", + 0, + 1 + ], + [ + "UDIS", + 1, + 1 + ], + [ + "URS", + 2, + 1 + ], + [ + "OPM", + 3, + 1 + ], + [ + "ARPE", + 7, + 1 + ], + [ + "CKD", + 8, + 2 + ], + [ + "UIFREMAP", + 11, + 1 + ], + [ + "DITHEN", + 12, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "size": 16, + "fields": [ + [ + "CCPC", + 0, + 1 + ], + [ + "CCUS", + 2, + 1 + ], + [ + "CCDS", + 3, + 1 + ], + [ + "OIS1", + 8, + 1 + ], + [ + "OIS1N", + 9, + 1 + ] + ] + }, + { + "name": "DIER", + "offset": "0x0C", + "size": 16, + "fields": [ + [ + "UIE", + 0, + 1 + ], + [ + "CC1IE", + 1, + 1 + ], + [ + "COMIE", + 5, + 1 + ], + [ + "BIE", + 7, + 1 + ], + [ + "UDE", + 8, + 1 + ], + [ + "CC1DE", + 9, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x10", + "size": 16, + "fields": [ + [ + "UIF", + 0, + 1 + ], + [ + "CC1IF", + 1, + 1 + ], + [ + "COMIF", + 5, + 1 + ], + [ + "BIF", + 7, + 1 + ], + [ + "CC1OF", + 9, + 1 + ] + ] + }, + { + "name": "EGR", + "offset": "0x14", + "size": 16, + "fields": [ + [ + "UG", + 0, + 1, + "w" + ], + [ + "CC1G", + 1, + 1, + "w" + ], + [ + "COMG", + 5, + 1, + "w" + ], + [ + "BG", + 7, + 1, + "w" + ] + ] + }, + { + "name": "CCMR1", + "offset": "0x18", + "fields": [ + [ + "OC1M_3", + 16, + 1 + ], + [ + "IC1F", + 4, + 4 + ], + [ + "IC1PSC", + 2, + 2 + ], + [ + "CC1S", + 0, + 2 + ] + ] + }, + { + "name": "CCER", + "offset": "0x20", + "size": 16, + "fields": [ + [ + "CC1E", + 0, + 1 + ], + [ + "CC1P", + 1, + 1 + ], + [ + "CC1NE", + 2, + 1 + ], + [ + "CC1NP", + 3, + 1 + ] + ] + }, + { + "name": "CNT", + "offset": "0x24", + "fields": [ + [ + "CNT", + 0, + 16 + ], + [ + "UIFCPY", + 31, + 1, + "r" + ] + ] + }, + { + "name": "PSC", + "offset": "0x28", + "size": 16, + "fields": [ + [ + "PSC", + 0, + 16 + ] + ] + }, + { + "name": "ARR", + "offset": "0x2C", + "reset": "0x0000FFFF", + "fields": [ + [ + "ARR", + 0, + 20 + ] + ] + }, + { + "name": "RCR", + "offset": "0x30", + "size": 16, + "fields": [ + [ + "REP", + 0, + 8 + ] + ] + }, + { + "name": "CCR1", + "offset": "0x34", + "fields": [ + [ + "CCR1", + 0, + 20 + ] + ] + }, + { + "name": "BDTR", + "offset": "0x44", + "fields": [ + [ + "DTG", + 0, + 8 + ], + [ + "LOCK", + 8, + 2 + ], + [ + "OSSI", + 10, + 1 + ], + [ + "OSSR", + 11, + 1 + ], + [ + "BKE", + 12, + 1 + ], + [ + "BKP", + 13, + 1 + ], + [ + "AOE", + 14, + 1 + ], + [ + "MOE", + 15, + 1 + ], + [ + "BKF", + 16, + 4 + ], + [ + "BKDSRM", + 26, + 1 + ], + [ + "BKBID", + 28, + 1 + ] + ] + }, + { + "name": "DTR2", + "offset": "0x54", + "fields": [ + [ + "DTGF", + 0, + 8 + ], + [ + "DTAE", + 16, + 1 + ], + [ + "DTPE", + 17, + 1 + ] + ] + }, + { + "name": "TISEL", + "offset": "0x5C", + "fields": [ + [ + "TI1SEL", + 0, + 4 + ] + ] + }, + { + "name": "AF1", + "offset": "0x60", + "reset": "0x00000001", + "fields": [ + [ + "BKINE", + 0, + 1 + ], + [ + "BKCMP1E", + 1, + 1 + ], + [ + "BKCMP2E", + 2, + 1 + ], + [ + "BKCMP3E", + 3, + 1 + ], + [ + "BKCMP4E", + 4, + 1 + ], + [ + "BKCMP5E", + 5, + 1 + ], + [ + "BKCMP6E", + 6, + 1 + ], + [ + "BKCMP7E", + 7, + 1 + ], + [ + "BKCMP8E", + 8, + 1 + ], + [ + "BKINP", + 9, + 1 + ], + [ + "BKCMP1P", + 10, + 1 + ], + [ + "BKCMP2P", + 11, + 1 + ], + [ + "BKCMP3P", + 12, + 1 + ], + [ + "BKCMP4P", + 13, + 1 + ] + ] + }, + { + "name": "AF2", + "offset": "0x64", + "fields": [ + [ + "OCRSEL", + 16, + 3 + ] + ] + }, + { + "name": "OR1", + "offset": "0x68", + "fields": [ + [ + "HSE32EN", + 0, + 1 + ] + ] + }, + { + "name": "DCR", + "offset": "0x3DC", + "fields": [ + [ + "DBA", + 0, + 5 + ], + [ + "DBL", + 8, + 5 + ] + ] + }, + { + "name": "DMAR", + "offset": "0x3E0", + "fields": [ + [ + "DMAB", + 0, + 32 + ] + ] + } + ], + "interrupts": [ + "TIM1_UP_TIM16" + ] + }, + { + "name": "TIM17", + "base": "0x40014800", + "derived_from": "TIM16", + "interrupts": [ + "TIM1_TRG_COM" + ] + }, + { + "name": "TIM20", + "base": "0x40015000", + "interrupts": [ + "TIM20_BRK", + "TIM20_UP", + "TIM20_TRG_COM", + "TIM20_CC" + ], + "derived_from": "TIM1" + }, + { + "name": "SAI", + "base": "0x40015400", + "interrupts": [ + "SAI" + ], + "registers": [ + { + "name": "BCR1", + "offset": "0x24", + "reset": "0x00000040", + "fields": [ + [ + "MCKEN", + 27, + 1 + ], + [ + "OSR", + 26, + 1 + ], + [ + "MCJDIV", + 20, + 6 + ], + [ + "NODIV", + 19, + 1 + ], + [ + "DMAEN", + 17, + 1 + ], + [ + "SAIBEN", + 16, + 1 + ], + [ + "OutDri", + 13, + 1 + ], + [ + "MONO", + 12, + 1 + ], + [ + "SYNCEN", + 10, + 2 + ], + [ + "CKSTR", + 9, + 1 + ], + [ + "LSBFIRST", + 8, + 1 + ], + [ + "DS", + 5, + 3 + ], + [ + "PRTCFG", + 2, + 2 + ], + [ + "MODE", + 0, + 2 + ] + ] + }, + { + "name": "BCR2", + "offset": "0x28", + "fields": [ + [ + "COMP", + 14, + 2 + ], + [ + "CPL", + 13, + 1 + ], + [ + "MUTECN", + 7, + 6 + ], + [ + "MUTEVAL", + 6, + 1 + ], + [ + "MUTE", + 5, + 1 + ], + [ + "TRIS", + 4, + 1 + ], + [ + "FFLUS", + 3, + 1 + ], + [ + "FTH", + 0, + 3 + ] + ] + }, + { + "name": "BFRCR", + "offset": "0x2C", + "reset": "0x00000007", + "fields": [ + [ + "FSOFF", + 18, + 1 + ], + [ + "FSPOL", + 17, + 1 + ], + [ + "FSDEF", + 16, + 1 + ], + [ + "FSALL", + 8, + 7 + ], + [ + "FRL", + 0, + 8 + ] + ] + }, + { + "name": "BSLOTR", + "offset": "0x30", + "fields": [ + [ + "SLOTEN", + 16, + 16 + ], + [ + "NBSLOT", + 8, + 4 + ], + [ + "SLOTSZ", + 6, + 2 + ], + [ + "FBOFF", + 0, + 5 + ] + ] + }, + { + "name": "BIM", + "offset": "0x34", + "fields": [ + [ + "LFSDETIE", + 6, + 1 + ], + [ + "AFSDETIE", + 5, + 1 + ], + [ + "CNRDYIE", + 4, + 1 + ], + [ + "FREQIE", + 3, + 1 + ], + [ + "WCKCFG", + 2, + 1 + ], + [ + "MUTEDET", + 1, + 1 + ], + [ + "OVRUDRIE", + 0, + 1 + ] + ] + }, + { + "name": "BSR", + "offset": "0x38", + "fields": [ + [ + "FLVL", + 16, + 3, + "r" + ], + [ + "LFSDET", + 6, + 1, + "r" + ], + [ + "AFSDET", + 5, + 1, + "r" + ], + [ + "CNRDY", + 4, + 1, + "r" + ], + [ + "FREQ", + 3, + 1, + "r" + ], + [ + "WCKCFG", + 2, + 1, + "r" + ], + [ + "MUTEDET", + 1, + 1, + "r" + ], + [ + "OVRUDR", + 0, + 1, + "r" + ] + ] + }, + { + "name": "BCLRFR", + "offset": "0x3C", + "fields": [ + [ + "LFSDET", + 6, + 1, + "w" + ], + [ + "CAFSDET", + 5, + 1, + "w" + ], + [ + "CNRDY", + 4, + 1, + "w" + ], + [ + "WCKCFG", + 2, + 1, + "w" + ], + [ + "MUTEDET", + 1, + 1, + "w" + ], + [ + "OVRUDR", + 0, + 1, + "w" + ] + ] + }, + { + "name": "BDR", + "offset": "0x40", + "fields": [ + [ + "DATA", + 0, + 32 + ] + ] + }, + { + "name": "ACR1", + "offset": "0x04", + "reset": "0x00000040", + "fields": [ + [ + "MCKEN", + 27, + 1 + ], + [ + "OSR", + 26, + 1 + ], + [ + "MCJDIV", + 20, + 6 + ], + [ + "NODIV", + 19, + 1 + ], + [ + "DMAEN", + 17, + 1 + ], + [ + "SAIAEN", + 16, + 1 + ], + [ + "OutDri", + 13, + 1 + ], + [ + "MONO", + 12, + 1 + ], + [ + "SYNCEN", + 10, + 2 + ], + [ + "CKSTR", + 9, + 1 + ], + [ + "LSBFIRST", + 8, + 1 + ], + [ + "DS", + 5, + 3 + ], + [ + "PRTCFG", + 2, + 2 + ], + [ + "MODE", + 0, + 2 + ] + ] + }, + { + "name": "ACR2", + "offset": "0x08", + "fields": [ + [ + "COMP", + 14, + 2 + ], + [ + "CPL", + 13, + 1 + ], + [ + "MUTECN", + 7, + 6 + ], + [ + "MUTEVAL", + 6, + 1 + ], + [ + "MUTE", + 5, + 1 + ], + [ + "TRIS", + 4, + 1 + ], + [ + "FFLUS", + 3, + 1 + ], + [ + "FTH", + 0, + 3 + ] + ] + }, + { + "name": "AFRCR", + "offset": "0x0C", + "reset": "0x00000007", + "fields": [ + [ + "FSOFF", + 18, + 1 + ], + [ + "FSPOL", + 17, + 1 + ], + [ + "FSDEF", + 16, + 1 + ], + [ + "FSALL", + 8, + 7 + ], + [ + "FRL", + 0, + 8 + ] + ] + }, + { + "name": "ASLOTR", + "offset": "0x10", + "fields": [ + [ + "SLOTEN", + 16, + 16 + ], + [ + "NBSLOT", + 8, + 4 + ], + [ + "SLOTSZ", + 6, + 2 + ], + [ + "FBOFF", + 0, + 5 + ] + ] + }, + { + "name": "AIM", + "offset": "0x14", + "fields": [ + [ + "LFSDET", + 6, + 1 + ], + [ + "AFSDETIE", + 5, + 1 + ], + [ + "CNRDYIE", + 4, + 1 + ], + [ + "FREQIE", + 3, + 1 + ], + [ + "WCKCFG", + 2, + 1 + ], + [ + "MUTEDET", + 1, + 1 + ], + [ + "OVRUDRIE", + 0, + 1 + ] + ] + }, + { + "name": "ASR", + "offset": "0x18", + "fields": [ + [ + "FLVL", + 16, + 3 + ], + [ + "LFSDET", + 6, + 1 + ], + [ + "AFSDET", + 5, + 1 + ], + [ + "CNRDY", + 4, + 1 + ], + [ + "FREQ", + 3, + 1 + ], + [ + "WCKCFG", + 2, + 1 + ], + [ + "MUTEDET", + 1, + 1 + ], + [ + "OVRUDR", + 0, + 1 + ] + ] + }, + { + "name": "ACLRFR", + "offset": "0x1C", + "fields": [ + [ + "LFSDET", + 6, + 1 + ], + [ + "CAFSDET", + 5, + 1 + ], + [ + "CNRDY", + 4, + 1 + ], + [ + "WCKCFG", + 2, + 1 + ], + [ + "MUTEDET", + 1, + 1 + ], + [ + "OVRUDR", + 0, + 1 + ] + ] + }, + { + "name": "ADR", + "offset": "0x20", + "fields": [ + [ + "DATA", + 0, + 32 + ] + ] + }, + { + "name": "PDMCR", + "offset": "0x44", + "fields": [ + [ + "PDMEN", + 0, + 1 + ], + [ + "MICNBR", + 4, + 2 + ], + [ + "CKEN1", + 8, + 1 + ], + [ + "CKEN2", + 9, + 1 + ], + [ + "CKEN3", + 10, + 1 + ], + [ + "CKEN4", + 11, + 1 + ] + ] + }, + { + "name": "PDMDLY", + "offset": "0x48", + "fields": [ + [ + "DLYM1L", + 0, + 3 + ], + [ + "DLYM1R", + 4, + 3 + ], + [ + "DLYM2L", + 8, + 3 + ], + [ + "DLYM2R", + 12, + 3 + ], + [ + "DLYM3L", + 16, + 3 + ], + [ + "DLYM3R", + 20, + 3 + ], + [ + "DLYM4L", + 24, + 3 + ], + [ + "DLYM4R", + 28, + 3 + ] + ] + } + ] + }, + { + "name": "HRTIM_Master", + "base": "0x40016800", + "interrupts": [ + "HRTIM_Master_IRQn" + ], + "registers": [ + { + "name": "MCR", + "offset": "0x00", + "fields": [ + [ + "BRSTDMA", + 30, + 2 + ], + [ + "MREPU", + 29, + 1 + ], + [ + "PREEN", + 27, + 1 + ], + [ + "DACSYNC", + 25, + 2 + ], + [ + "TFCEN", + 22, + 1 + ], + [ + "TECEN", + 21, + 1 + ], + [ + "TDCEN", + 20, + 1 + ], + [ + "TCCEN", + 19, + 1 + ], + [ + "TBCEN", + 18, + 1 + ], + [ + "TACEN", + 17, + 1 + ], + [ + "MCEN", + 16, + 1 + ], + [ + "SYNC_SRC", + 14, + 2 + ], + [ + "SYNC_OUT", + 12, + 2 + ], + [ + "SYNCSTRTM", + 11, + 1 + ], + [ + "SYNCRSTM", + 10, + 1 + ], + [ + "SYNC_IN", + 8, + 2 + ], + [ + "INTLVD", + 6, + 2 + ], + [ + "HALF", + 5, + 1 + ], + [ + "RETRIG", + 4, + 1 + ], + [ + "CONT", + 3, + 1 + ], + [ + "CK_PSC", + 0, + 3 + ] + ] + }, + { + "name": "MISR", + "offset": "0x04", + "fields": [ + [ + "MUPD", + 6, + 1, + "r" + ], + [ + "SYNC", + 5, + 1, + "r" + ], + [ + "MREP", + 4, + 1, + "r" + ], + [ + "MCMP4", + 3, + 1, + "r" + ], + [ + "MCMP3", + 2, + 1, + "r" + ], + [ + "MCMP2", + 1, + 1, + "r" + ], + [ + "MCMP1", + 0, + 1, + "r" + ] + ] + }, + { + "name": "MICR", + "offset": "0x08", + "fields": [ + [ + "MUPDC", + 6, + 1, + "w" + ], + [ + "SYNCC", + 5, + 1, + "w" + ], + [ + "MREPC", + 4, + 1, + "w" + ], + [ + "MCMP4C", + 3, + 1, + "w" + ], + [ + "MCMP3C", + 2, + 1, + "w" + ], + [ + "MCMP2C", + 1, + 1, + "w" + ], + [ + "MCMP1C", + 0, + 1, + "w" + ] + ] + }, + { + "name": "MDIER", + "offset": "0x0C", + "fields": [ + [ + "MUPDDE", + 22, + 1 + ], + [ + "SYNCDE", + 21, + 1 + ], + [ + "MREPDE", + 20, + 1 + ], + [ + "MCMP4DE", + 19, + 1 + ], + [ + "MCMP3DE", + 18, + 1 + ], + [ + "MCMP2DE", + 17, + 1 + ], + [ + "MCMP1DE", + 16, + 1 + ], + [ + "MUPDIE", + 6, + 1 + ], + [ + "SYNCIE", + 5, + 1 + ], + [ + "MREPIE", + 4, + 1 + ], + [ + "MCMP4IE", + 3, + 1 + ], + [ + "MCMP3IE", + 2, + 1 + ], + [ + "MCMP2IE", + 1, + 1 + ], + [ + "MCMP1IE", + 0, + 1 + ] + ] + }, + { + "name": "MCNTR", + "offset": "0x10", + "fields": [ + [ + "MCNT", + 0, + 16 + ] + ] + }, + { + "name": "MPER", + "offset": "0x14", + "reset": "0x0000FFFF", + "fields": [ + [ + "MPER", + 0, + 16 + ] + ] + }, + { + "name": "MREP", + "offset": "0x18", + "fields": [ + [ + "MREP", + 0, + 8 + ] + ] + }, + { + "name": "MCMP1R", + "offset": "0x1C", + "fields": [ + [ + "MCMP1", + 0, + 16 + ] + ] + }, + { + "name": "MCMP2R", + "offset": "0x24", + "fields": [ + [ + "MCMP2", + 0, + 16 + ] + ] + }, + { + "name": "MCMP3R", + "offset": "0x28", + "fields": [ + [ + "MCMP3", + 0, + 16 + ] + ] + }, + { + "name": "MCMP4R", + "offset": "0x2C", + "fields": [ + [ + "MCMP4", + 0, + 16 + ] + ] + } + ] + }, + { + "name": "HRTIM_TIMA", + "base": "0x40016880", + "interrupts": [ + "HRTIM_TIMA_IRQn" + ], + "registers": [ + { + "name": "TIMACR", + "offset": "0x00", + "fields": [ + [ + "UPDGAT", + 28, + 4 + ], + [ + "PREEN", + 27, + 1 + ], + [ + "DACSYNC", + 25, + 2 + ], + [ + "MSTU", + 24, + 1 + ], + [ + "TEU", + 23, + 1 + ], + [ + "TDU", + 22, + 1 + ], + [ + "TCU", + 21, + 1 + ], + [ + "TBU", + 20, + 1 + ], + [ + "TxRSTU", + 18, + 1 + ], + [ + "TxREPU", + 17, + 1 + ], + [ + "TFU", + 16, + 1 + ], + [ + "DELCMP4", + 14, + 2 + ], + [ + "DELCMP2", + 12, + 2 + ], + [ + "SYNCSTRTx", + 11, + 1 + ], + [ + "SYNCRSTx", + 10, + 1 + ], + [ + "RSYNCU", + 9, + 1 + ], + [ + "INTLVD", + 7, + 2 + ], + [ + "PSHPLL", + 6, + 1 + ], + [ + "HALF", + 5, + 1 + ], + [ + "RETRIG", + 4, + 1 + ], + [ + "CONT", + 3, + 1 + ], + [ + "CK_PSCx", + 0, + 3 + ] + ] + }, + { + "name": "TIMAISR", + "offset": "0x04", + "fields": [ + [ + "O2CPY", + 21, + 1, + "r" + ], + [ + "O1CPY", + 20, + 1, + "r" + ], + [ + "O2STAT", + 19, + 1, + "r" + ], + [ + "O1STAT", + 18, + 1, + "r" + ], + [ + "IPPSTAT", + 17, + 1, + "r" + ], + [ + "CPPSTAT", + 16, + 1, + "r" + ], + [ + "DLYPRT", + 14, + 1, + "r" + ], + [ + "RST", + 13, + 1, + "r" + ], + [ + "RSTx2", + 12, + 1, + "r" + ], + [ + "SETx2", + 11, + 1, + "r" + ], + [ + "RSTx1", + 10, + 1, + "r" + ], + [ + "SETx1", + 9, + 1, + "r" + ], + [ + "CPT2", + 8, + 1, + "r" + ], + [ + "CPT1", + 7, + 1, + "r" + ], + [ + "UPD", + 6, + 1, + "r" + ], + [ + "REP", + 4, + 1, + "r" + ], + [ + "CMP4", + 3, + 1, + "r" + ], + [ + "CMP3", + 2, + 1, + "r" + ], + [ + "CMP2", + 1, + 1, + "r" + ], + [ + "CMP1", + 0, + 1, + "r" + ] + ] + }, + { + "name": "TIMAICR", + "offset": "0x08", + "fields": [ + [ + "DLYPRTC", + 14, + 1, + "w" + ], + [ + "RSTC", + 13, + 1, + "w" + ], + [ + "RSTx2C", + 12, + 1, + "w" + ], + [ + "SET2xC", + 11, + 1, + "w" + ], + [ + "RSTx1C", + 10, + 1, + "w" + ], + [ + "SET1xC", + 9, + 1, + "w" + ], + [ + "CPT2C", + 8, + 1, + "w" + ], + [ + "CPT1C", + 7, + 1, + "w" + ], + [ + "UPDC", + 6, + 1, + "w" + ], + [ + "REPC", + 4, + 1, + "w" + ], + [ + "CMP4C", + 3, + 1, + "w" + ], + [ + "CMP3C", + 2, + 1, + "w" + ], + [ + "CMP2C", + 1, + 1, + "w" + ], + [ + "CMP1C", + 0, + 1, + "w" + ] + ] + }, + { + "name": "TIMADIER", + "offset": "0x0C", + "fields": [ + [ + "DLYPRTDE", + 30, + 1 + ], + [ + "RSTDE", + 29, + 1 + ], + [ + "RSTx2DE", + 28, + 1 + ], + [ + "SETx2DE", + 27, + 1 + ], + [ + "RSTx1DE", + 26, + 1 + ], + [ + "SET1xDE", + 25, + 1 + ], + [ + "CPT2DE", + 24, + 1 + ], + [ + "CPT1DE", + 23, + 1 + ], + [ + "UPDDE", + 22, + 1 + ], + [ + "REPDE", + 20, + 1 + ], + [ + "CMP4DE", + 19, + 1 + ], + [ + "CMP3DE", + 18, + 1 + ], + [ + "CMP2DE", + 17, + 1 + ], + [ + "CMP1DE", + 16, + 1 + ], + [ + "DLYPRTIE", + 14, + 1 + ], + [ + "RSTIE", + 13, + 1 + ], + [ + "RSTx2IE", + 12, + 1 + ], + [ + "SETx2IE", + 11, + 1 + ], + [ + "RSTx1IE", + 10, + 1 + ], + [ + "SET1xIE", + 9, + 1 + ], + [ + "CPT2IE", + 8, + 1 + ], + [ + "CPT1IE", + 7, + 1 + ], + [ + "UPDIE", + 6, + 1 + ], + [ + "REPIE", + 4, + 1 + ], + [ + "CMP4IE", + 3, + 1 + ], + [ + "CMP3IE", + 2, + 1 + ], + [ + "CMP2IE", + 1, + 1 + ], + [ + "CMP1IE", + 0, + 1 + ] + ] + }, + { + "name": "CNTAR", + "offset": "0x10", + "fields": [ + [ + "CNTx", + 0, + 16 + ] + ] + }, + { + "name": "PERAR", + "offset": "0x14", + "reset": "0x0000FFFF", + "fields": [ + [ + "PERx", + 0, + 16 + ] + ] + }, + { + "name": "REPAR", + "offset": "0x18", + "fields": [ + [ + "REPx", + 0, + 8 + ] + ] + }, + { + "name": "CMP1AR", + "offset": "0x1C", + "fields": [ + [ + "CMP1x", + 0, + 16 + ] + ] + }, + { + "name": "CMP1CAR", + "offset": "0x20", + "fields": [ + [ + "REPx", + 16, + 8 + ], + [ + "CMP1x", + 0, + 16 + ] + ] + }, + { + "name": "CMP2AR", + "offset": "0x24", + "fields": [ + [ + "CMP2x", + 0, + 16 + ] + ] + }, + { + "name": "CMP3AR", + "offset": "0x28", + "fields": [ + [ + "CMP3x", + 0, + 16 + ] + ] + }, + { + "name": "CMP4AR", + "offset": "0x2C", + "fields": [ + [ + "CMP4x", + 0, + 16 + ] + ] + }, + { + "name": "CPT1AR", + "offset": "0x30", + "fields": [ + [ + "CPT1x", + 0, + 16, + "r" + ], + [ + "DIR", + 16, + 1, + "r" + ] + ] + }, + { + "name": "CPT2AR", + "offset": "0x34", + "fields": [ + [ + "DIR", + 16, + 1, + "r" + ], + [ + "CPT2x", + 0, + 16, + "r" + ] + ] + }, + { + "name": "DTAR", + "offset": "0x38", + "fields": [ + [ + "DTFLKx", + 31, + 1 + ], + [ + "DTFSLKx", + 30, + 1 + ], + [ + "SDTFx", + 25, + 1 + ], + [ + "DTFx", + 16, + 9 + ], + [ + "DTRLKx", + 15, + 1 + ], + [ + "DTRSLKx", + 14, + 1 + ], + [ + "DTPRSC", + 10, + 3 + ], + [ + "SDTRx", + 9, + 1 + ], + [ + "DTRx", + 0, + 9 + ] + ] + }, + { + "name": "SETA1R", + "offset": "0x3C", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SST", + 0, + 1 + ] + ] + }, + { + "name": "RSTA1R", + "offset": "0x40", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SRT", + 0, + 1 + ] + ] + }, + { + "name": "SETA2R", + "offset": "0x44", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SST", + 0, + 1 + ] + ] + }, + { + "name": "RSTA2R", + "offset": "0x48", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SRT", + 0, + 1 + ] + ] + }, + { + "name": "EEFAR1", + "offset": "0x4C", + "fields": [ + [ + "EE5FLTR", + 25, + 4 + ], + [ + "EE5LTCH", + 24, + 1 + ], + [ + "EE4FLTR", + 19, + 4 + ], + [ + "EE4LTCH", + 18, + 1 + ], + [ + "EE3FLTR", + 13, + 4 + ], + [ + "EE3LTCH", + 12, + 1 + ], + [ + "EE2FLTR", + 7, + 4 + ], + [ + "EE2LTCH", + 6, + 1 + ], + [ + "EE1FLTR", + 1, + 4 + ], + [ + "EE1LTCH", + 0, + 1 + ] + ] + }, + { + "name": "EEFAR2", + "offset": "0x50", + "fields": [ + [ + "EE10FLTR", + 25, + 4 + ], + [ + "EE10LTCH", + 24, + 1 + ], + [ + "EE9FLTR", + 19, + 4 + ], + [ + "EE9LTCH", + 18, + 1 + ], + [ + "EE8FLTR", + 13, + 4 + ], + [ + "EE8LTCH", + 12, + 1 + ], + [ + "EE7FLTR", + 7, + 4 + ], + [ + "EE7LTCH", + 6, + 1 + ], + [ + "EE6FLTR", + 1, + 4 + ], + [ + "EE6LTCH", + 0, + 1 + ] + ] + }, + { + "name": "RSTAR", + "offset": "0x54", + "fields": [ + [ + "TIMFCPM2", + 31, + 1 + ], + [ + "TIMECMP4", + 30, + 1 + ], + [ + "TIMECMP2", + 29, + 1 + ], + [ + "TIMECMP1", + 28, + 1 + ], + [ + "TIMDCMP4", + 27, + 1 + ], + [ + "TIMDCMP2", + 26, + 1 + ], + [ + "TIMDCMP1", + 25, + 1 + ], + [ + "TIMCCMP4", + 24, + 1 + ], + [ + "TIMCCMP2", + 23, + 1 + ], + [ + "TIMCCMP1", + 22, + 1 + ], + [ + "TIMBCMP4", + 21, + 1 + ], + [ + "TIMBCMP2", + 20, + 1 + ], + [ + "TIMBCMP1", + 19, + 1 + ], + [ + "EXTEVNT10", + 18, + 1 + ], + [ + "EXTEVNT9", + 17, + 1 + ], + [ + "EXTEVNT8", + 16, + 1 + ], + [ + "EXTEVNT7", + 15, + 1 + ], + [ + "EXTEVNT6", + 14, + 1 + ], + [ + "EXTEVNT5", + 13, + 1 + ], + [ + "EXTEVNT4", + 12, + 1 + ], + [ + "EXTEVNT3", + 11, + 1 + ], + [ + "EXTEVNT2", + 10, + 1 + ], + [ + "EXTEVNT1", + 9, + 1 + ], + [ + "MSTCMP4", + 8, + 1 + ], + [ + "MSTCMP3", + 7, + 1 + ], + [ + "MSTCMP2", + 6, + 1 + ], + [ + "MSTCMP1", + 5, + 1 + ], + [ + "MSTPER", + 4, + 1 + ], + [ + "CMP4", + 3, + 1 + ], + [ + "CMP2", + 2, + 1 + ], + [ + "UPDT", + 1, + 1 + ], + [ + "TIMFCMP1", + 0, + 1 + ] + ] + }, + { + "name": "CHPAR", + "offset": "0x58", + "fields": [ + [ + "STRTPW", + 7, + 4 + ], + [ + "CHPDTY", + 4, + 3 + ], + [ + "CHPFRQ", + 0, + 4 + ] + ] + }, + { + "name": "CPT1ACR", + "offset": "0x5C", + "fields": [ + [ + "TECMP2", + 31, + 1 + ], + [ + "TECMP1", + 30, + 1 + ], + [ + "TE1RST", + 29, + 1 + ], + [ + "TE1SET", + 28, + 1 + ], + [ + "TDCMP2", + 27, + 1 + ], + [ + "TDCMP1", + 26, + 1 + ], + [ + "TD1RST", + 25, + 1 + ], + [ + "TD1SET", + 24, + 1 + ], + [ + "TCCMP2", + 23, + 1 + ], + [ + "TCCMP1", + 22, + 1 + ], + [ + "TC1RST", + 21, + 1 + ], + [ + "TC1SET", + 20, + 1 + ], + [ + "TBCMP2", + 19, + 1 + ], + [ + "TBCMP1", + 18, + 1 + ], + [ + "TB1RST", + 17, + 1 + ], + [ + "TB1SET", + 16, + 1 + ], + [ + "TFCMP2", + 15, + 1 + ], + [ + "TFCMP1", + 14, + 1 + ], + [ + "TF1RST", + 13, + 1 + ], + [ + "TF1SET", + 12, + 1 + ], + [ + "EXEV10CPT", + 11, + 1 + ], + [ + "EXEV9CPT", + 10, + 1 + ], + [ + "EXEV8CPT", + 9, + 1 + ], + [ + "EXEV7CPT", + 8, + 1 + ], + [ + "EXEV6CPT", + 7, + 1 + ], + [ + "EXEV5CPT", + 6, + 1 + ], + [ + "EXEV4CPT", + 5, + 1 + ], + [ + "EXEV3CPT", + 4, + 1 + ], + [ + "EXEV2CPT", + 3, + 1 + ], + [ + "EXEV1CPT", + 2, + 1 + ], + [ + "UDPCPT", + 1, + 1 + ], + [ + "SWCPT", + 0, + 1 + ] + ] + }, + { + "name": "CPT2ACR", + "offset": "0x60", + "fields": [ + [ + "TECMP2", + 31, + 1 + ], + [ + "TECMP1", + 30, + 1 + ], + [ + "TE1RST", + 29, + 1 + ], + [ + "TE1SET", + 28, + 1 + ], + [ + "TDCMP2", + 27, + 1 + ], + [ + "TDCMP1", + 26, + 1 + ], + [ + "TD1RST", + 25, + 1 + ], + [ + "TD1SET", + 24, + 1 + ], + [ + "TCCMP2", + 23, + 1 + ], + [ + "TCCMP1", + 22, + 1 + ], + [ + "TC1RST", + 21, + 1 + ], + [ + "TC1SET", + 20, + 1 + ], + [ + "TBCMP2", + 19, + 1 + ], + [ + "TBCMP1", + 18, + 1 + ], + [ + "TB1RST", + 17, + 1 + ], + [ + "TB1SET", + 16, + 1 + ], + [ + "TFCMP2", + 15, + 1 + ], + [ + "TFCMP1", + 14, + 1 + ], + [ + "TF1RST", + 13, + 1 + ], + [ + "TF1SET", + 12, + 1 + ], + [ + "EXEV10CPT", + 11, + 1 + ], + [ + "EXEV9CPT", + 10, + 1 + ], + [ + "EXEV8CPT", + 9, + 1 + ], + [ + "EXEV7CPT", + 8, + 1 + ], + [ + "EXEV6CPT", + 7, + 1 + ], + [ + "EXEV5CPT", + 6, + 1 + ], + [ + "EXEV4CPT", + 5, + 1 + ], + [ + "EXEV3CPT", + 4, + 1 + ], + [ + "EXEV2CPT", + 3, + 1 + ], + [ + "EXEV1CPT", + 2, + 1 + ], + [ + "UDPCPT", + 1, + 1 + ], + [ + "SWCPT", + 0, + 1 + ] + ] + }, + { + "name": "OUTAR", + "offset": "0x64", + "fields": [ + [ + "DIDL2", + 23, + 1 + ], + [ + "CHP2", + 22, + 1 + ], + [ + "FAULT2", + 20, + 2 + ], + [ + "IDLES2", + 19, + 1 + ], + [ + "IDLEM2", + 18, + 1 + ], + [ + "POL2", + 17, + 1 + ], + [ + "BIAR", + 14, + 1 + ], + [ + "DLYPRT", + 10, + 3 + ], + [ + "DLYPRTEN", + 9, + 1 + ], + [ + "DTEN", + 8, + 1 + ], + [ + "DIDL1", + 7, + 1 + ], + [ + "CHP1", + 6, + 1 + ], + [ + "FAULT1", + 4, + 2 + ], + [ + "IDLES1", + 3, + 1 + ], + [ + "IDLEM1", + 2, + 1 + ], + [ + "POL1", + 1, + 1 + ] + ] + }, + { + "name": "FLTAR", + "offset": "0x68", + "fields": [ + [ + "FLTLCK", + 31, + 1 + ], + [ + "FLT6EN", + 5, + 1 + ], + [ + "FLT5EN", + 4, + 1 + ], + [ + "FLT4EN", + 3, + 1 + ], + [ + "FLT3EN", + 2, + 1 + ], + [ + "FLT2EN", + 1, + 1 + ], + [ + "FLT1EN", + 0, + 1 + ] + ] + }, + { + "name": "TIMACR2", + "offset": "0x6C", + "fields": [ + [ + "TRGHLF", + 20, + 1 + ], + [ + "GTCMP3", + 17, + 1 + ], + [ + "GTCMP1", + 16, + 1 + ], + [ + "FEROM", + 14, + 2 + ], + [ + "BMROM", + 12, + 2 + ], + [ + "ADROM", + 10, + 2 + ], + [ + "OUTROM", + 8, + 2 + ], + [ + "ROM", + 6, + 2 + ], + [ + "UDM", + 4, + 1 + ], + [ + "DCDR", + 2, + 1 + ], + [ + "DCDS", + 1, + 1 + ], + [ + "DCDE", + 0, + 1 + ] + ] + }, + { + "name": "AEEFR3", + "offset": "0x70", + "fields": [ + [ + "EEVACNT", + 8, + 6 + ], + [ + "EEVASEL", + 4, + 4 + ], + [ + "EEVARSTM", + 2, + 1 + ], + [ + "EEVACRES", + 1, + 1 + ], + [ + "EEVACE", + 0, + 1 + ] + ] + } + ] + }, + { + "name": "HRTIM_TIMB", + "base": "0x40016900", + "interrupts": [ + "HRTIM_TIMB_IRQn" + ], + "registers": [ + { + "name": "TIMBCR", + "offset": "0x00", + "fields": [ + [ + "UPDGAT", + 28, + 4 + ], + [ + "PREEN", + 27, + 1 + ], + [ + "DACSYNC", + 25, + 2 + ], + [ + "MSTU", + 24, + 1 + ], + [ + "TEU", + 23, + 1 + ], + [ + "TDU", + 22, + 1 + ], + [ + "TCU", + 21, + 1 + ], + [ + "TAU", + 19, + 1 + ], + [ + "TxRSTU", + 18, + 1 + ], + [ + "TxREPU", + 17, + 1 + ], + [ + "TFU", + 16, + 1 + ], + [ + "DELCMP4", + 14, + 2 + ], + [ + "DELCMP2", + 12, + 2 + ], + [ + "SYNCSTRTx", + 11, + 1 + ], + [ + "SYNCRSTx", + 10, + 1 + ], + [ + "RSYNCU", + 9, + 1 + ], + [ + "INTLVD", + 7, + 2 + ], + [ + "PSHPLL", + 6, + 1 + ], + [ + "HALF", + 5, + 1 + ], + [ + "RETRIG", + 4, + 1 + ], + [ + "CONT", + 3, + 1 + ], + [ + "CK_PSCx", + 0, + 3 + ] + ] + }, + { + "name": "TIMBISR", + "offset": "0x04", + "fields": [ + [ + "O2CPY", + 21, + 1, + "r" + ], + [ + "O1CPY", + 20, + 1, + "r" + ], + [ + "O2STAT", + 19, + 1, + "r" + ], + [ + "O1STAT", + 18, + 1, + "r" + ], + [ + "IPPSTAT", + 17, + 1, + "r" + ], + [ + "CPPSTAT", + 16, + 1, + "r" + ], + [ + "DLYPRT", + 14, + 1, + "r" + ], + [ + "RST", + 13, + 1, + "r" + ], + [ + "RSTx2", + 12, + 1, + "r" + ], + [ + "SETx2", + 11, + 1, + "r" + ], + [ + "RSTx1", + 10, + 1, + "r" + ], + [ + "SETx1", + 9, + 1, + "r" + ], + [ + "CPT2", + 8, + 1, + "r" + ], + [ + "CPT1", + 7, + 1, + "r" + ], + [ + "UPD", + 6, + 1, + "r" + ], + [ + "REP", + 4, + 1, + "r" + ], + [ + "CMP4", + 3, + 1, + "r" + ], + [ + "CMP3", + 2, + 1, + "r" + ], + [ + "CMP2", + 1, + 1, + "r" + ], + [ + "CMP1", + 0, + 1, + "r" + ] + ] + }, + { + "name": "TIMBICR", + "offset": "0x08", + "fields": [ + [ + "DLYPRTC", + 14, + 1, + "w" + ], + [ + "RSTC", + 13, + 1, + "w" + ], + [ + "RSTx2C", + 12, + 1, + "w" + ], + [ + "SET2xC", + 11, + 1, + "w" + ], + [ + "RSTx1C", + 10, + 1, + "w" + ], + [ + "SET1xC", + 9, + 1, + "w" + ], + [ + "CPT2C", + 8, + 1, + "w" + ], + [ + "CPT1C", + 7, + 1, + "w" + ], + [ + "UPDC", + 6, + 1, + "w" + ], + [ + "REPC", + 4, + 1, + "w" + ], + [ + "CMP4C", + 3, + 1, + "w" + ], + [ + "CMP3C", + 2, + 1, + "w" + ], + [ + "CMP2C", + 1, + 1, + "w" + ], + [ + "CMP1C", + 0, + 1, + "w" + ] + ] + }, + { + "name": "TIMBDIER", + "offset": "0x0C", + "fields": [ + [ + "DLYPRTDE", + 30, + 1 + ], + [ + "RSTDE", + 29, + 1 + ], + [ + "RSTx2DE", + 28, + 1 + ], + [ + "SETx2DE", + 27, + 1 + ], + [ + "RSTx1DE", + 26, + 1 + ], + [ + "SET1xDE", + 25, + 1 + ], + [ + "CPT2DE", + 24, + 1 + ], + [ + "CPT1DE", + 23, + 1 + ], + [ + "UPDDE", + 22, + 1 + ], + [ + "REPDE", + 20, + 1 + ], + [ + "CMP4DE", + 19, + 1 + ], + [ + "CMP3DE", + 18, + 1 + ], + [ + "CMP2DE", + 17, + 1 + ], + [ + "CMP1DE", + 16, + 1 + ], + [ + "DLYPRTIE", + 14, + 1 + ], + [ + "RSTIE", + 13, + 1 + ], + [ + "RSTx2IE", + 12, + 1 + ], + [ + "SETx2IE", + 11, + 1 + ], + [ + "RSTx1IE", + 10, + 1 + ], + [ + "SET1xIE", + 9, + 1 + ], + [ + "CPT2IE", + 8, + 1 + ], + [ + "CPT1IE", + 7, + 1 + ], + [ + "UPDIE", + 6, + 1 + ], + [ + "REPIE", + 4, + 1 + ], + [ + "CMP4IE", + 3, + 1 + ], + [ + "CMP3IE", + 2, + 1 + ], + [ + "CMP2IE", + 1, + 1 + ], + [ + "CMP1IE", + 0, + 1 + ] + ] + }, + { + "name": "CNTR", + "offset": "0x10", + "fields": [ + [ + "CNTx", + 0, + 16 + ] + ] + }, + { + "name": "PERBR", + "offset": "0x14", + "reset": "0x0000FFFF", + "fields": [ + [ + "PERx", + 0, + 16 + ] + ] + }, + { + "name": "REPBR", + "offset": "0x18", + "fields": [ + [ + "REPx", + 0, + 8 + ] + ] + }, + { + "name": "CMP1BR", + "offset": "0x1C", + "fields": [ + [ + "CMP1x", + 0, + 16 + ] + ] + }, + { + "name": "CMP1CBR", + "offset": "0x20", + "fields": [ + [ + "REPx", + 16, + 8 + ], + [ + "CMP1x", + 0, + 16 + ] + ] + }, + { + "name": "CMP2BR", + "offset": "0x24", + "fields": [ + [ + "CMP2x", + 0, + 16 + ] + ] + }, + { + "name": "CMP3BR", + "offset": "0x28", + "fields": [ + [ + "CMP3x", + 0, + 16 + ] + ] + }, + { + "name": "CMP4BR", + "offset": "0x2C", + "fields": [ + [ + "CMP4x", + 0, + 16 + ] + ] + }, + { + "name": "CPT1BR", + "offset": "0x30", + "fields": [ + [ + "CPT1x", + 0, + 16, + "r" + ], + [ + "DIR", + 16, + 1, + "r" + ] + ] + }, + { + "name": "CPT2BR", + "offset": "0x34", + "fields": [ + [ + "CPT2x", + 0, + 16, + "r" + ], + [ + "DIR", + 16, + 1, + "r" + ] + ] + }, + { + "name": "DTBR", + "offset": "0x38", + "fields": [ + [ + "DTFLKx", + 31, + 1 + ], + [ + "DTFSLKx", + 30, + 1 + ], + [ + "SDTFx", + 25, + 1 + ], + [ + "DTFx", + 16, + 9 + ], + [ + "DTRLKx", + 15, + 1 + ], + [ + "DTRSLKx", + 14, + 1 + ], + [ + "DTPRSC", + 10, + 3 + ], + [ + "SDTRx", + 9, + 1 + ], + [ + "DTRx", + 0, + 9 + ] + ] + }, + { + "name": "SETB1R", + "offset": "0x3C", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SST", + 0, + 1 + ] + ] + }, + { + "name": "RSTB1R", + "offset": "0x40", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SRT", + 0, + 1 + ] + ] + }, + { + "name": "SETB2R", + "offset": "0x44", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SST", + 0, + 1 + ] + ] + }, + { + "name": "RSTB2R", + "offset": "0x48", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SRT", + 0, + 1 + ] + ] + }, + { + "name": "EEFBR1", + "offset": "0x4C", + "fields": [ + [ + "EE5FLTR", + 25, + 4 + ], + [ + "EE5LTCH", + 24, + 1 + ], + [ + "EE4FLTR", + 19, + 4 + ], + [ + "EE4LTCH", + 18, + 1 + ], + [ + "EE3FLTR", + 13, + 4 + ], + [ + "EE3LTCH", + 12, + 1 + ], + [ + "EE2FLTR", + 7, + 4 + ], + [ + "EE2LTCH", + 6, + 1 + ], + [ + "EE1FLTR", + 1, + 4 + ], + [ + "EE1LTCH", + 0, + 1 + ] + ] + }, + { + "name": "EEFBR2", + "offset": "0x50", + "fields": [ + [ + "EE10FLTR", + 25, + 4 + ], + [ + "EE10LTCH", + 24, + 1 + ], + [ + "EE9FLTR", + 19, + 4 + ], + [ + "EE9LTCH", + 18, + 1 + ], + [ + "EE8FLTR", + 13, + 4 + ], + [ + "EE8LTCH", + 12, + 1 + ], + [ + "EE7FLTR", + 7, + 4 + ], + [ + "EE7LTCH", + 6, + 1 + ], + [ + "EE6FLTR", + 1, + 4 + ], + [ + "EE6LTCH", + 0, + 1 + ] + ] + }, + { + "name": "RSTBR", + "offset": "0x54", + "fields": [ + [ + "TIMFCPM2", + 31, + 1 + ], + [ + "TIMECMP4", + 30, + 1 + ], + [ + "TIMECMP2", + 29, + 1 + ], + [ + "TIMECMP1", + 28, + 1 + ], + [ + "TIMDCMP4", + 27, + 1 + ], + [ + "TIMDCMP2", + 26, + 1 + ], + [ + "TIMDCMP1", + 25, + 1 + ], + [ + "TIMCCMP4", + 24, + 1 + ], + [ + "TIMCCMP2", + 23, + 1 + ], + [ + "TIMCCMP1", + 22, + 1 + ], + [ + "TIMACMP4", + 21, + 1 + ], + [ + "TIMACMP2", + 20, + 1 + ], + [ + "TIMACMP1", + 19, + 1 + ], + [ + "EXTEVNT10", + 18, + 1 + ], + [ + "EXTEVNT9", + 17, + 1 + ], + [ + "EXTEVNT8", + 16, + 1 + ], + [ + "EXTEVNT7", + 15, + 1 + ], + [ + "EXTEVNT6", + 14, + 1 + ], + [ + "EXTEVNT5", + 13, + 1 + ], + [ + "EXTEVNT4", + 12, + 1 + ], + [ + "EXTEVNT3", + 11, + 1 + ], + [ + "EXTEVNT2", + 10, + 1 + ], + [ + "EXTEVNT1", + 9, + 1 + ], + [ + "MSTCMP4", + 8, + 1 + ], + [ + "MSTCMP3", + 7, + 1 + ], + [ + "MSTCMP2", + 6, + 1 + ], + [ + "MSTCMP1", + 5, + 1 + ], + [ + "MSTPER", + 4, + 1 + ], + [ + "CMP4", + 3, + 1 + ], + [ + "CMP2", + 2, + 1 + ], + [ + "UPDT", + 1, + 1 + ], + [ + "TIMFCMP1", + 0, + 1 + ] + ] + }, + { + "name": "CHPBR", + "offset": "0x58", + "fields": [ + [ + "STRTPW", + 7, + 4 + ], + [ + "CHPDTY", + 4, + 3 + ], + [ + "CHPFRQ", + 0, + 4 + ] + ] + }, + { + "name": "CPT1BCR", + "offset": "0x5C", + "fields": [ + [ + "TECMP2", + 31, + 1 + ], + [ + "TECMP1", + 30, + 1 + ], + [ + "TE1RST", + 29, + 1 + ], + [ + "TE1SET", + 28, + 1 + ], + [ + "TDCMP2", + 27, + 1 + ], + [ + "TDCMP1", + 26, + 1 + ], + [ + "TD1RST", + 25, + 1 + ], + [ + "TD1SET", + 24, + 1 + ], + [ + "TCCMP2", + 23, + 1 + ], + [ + "TCCMP1", + 22, + 1 + ], + [ + "TC1RST", + 21, + 1 + ], + [ + "TC1SET", + 20, + 1 + ], + [ + "TFCMP2", + 19, + 1 + ], + [ + "TFCMP1", + 18, + 1 + ], + [ + "TF1RST", + 17, + 1 + ], + [ + "TF1SET", + 16, + 1 + ], + [ + "TACMP2", + 15, + 1 + ], + [ + "TACMP1", + 14, + 1 + ], + [ + "TA1RST", + 13, + 1 + ], + [ + "TA1SET", + 12, + 1 + ], + [ + "EXEV10CPT", + 11, + 1 + ], + [ + "EXEV9CPT", + 10, + 1 + ], + [ + "EXEV8CPT", + 9, + 1 + ], + [ + "EXEV7CPT", + 8, + 1 + ], + [ + "EXEV6CPT", + 7, + 1 + ], + [ + "EXEV5CPT", + 6, + 1 + ], + [ + "EXEV4CPT", + 5, + 1 + ], + [ + "EXEV3CPT", + 4, + 1 + ], + [ + "EXEV2CPT", + 3, + 1 + ], + [ + "EXEV1CPT", + 2, + 1 + ], + [ + "UDPCPT", + 1, + 1 + ], + [ + "SWCPT", + 0, + 1 + ] + ] + }, + { + "name": "CPT2BCR", + "offset": "0x60", + "fields": [ + [ + "TECMP2", + 31, + 1 + ], + [ + "TECMP1", + 30, + 1 + ], + [ + "TE1RST", + 29, + 1 + ], + [ + "TE1SET", + 28, + 1 + ], + [ + "TDCMP2", + 27, + 1 + ], + [ + "TDCMP1", + 26, + 1 + ], + [ + "TD1RST", + 25, + 1 + ], + [ + "TD1SET", + 24, + 1 + ], + [ + "TCCMP2", + 23, + 1 + ], + [ + "TCCMP1", + 22, + 1 + ], + [ + "TC1RST", + 21, + 1 + ], + [ + "TC1SET", + 20, + 1 + ], + [ + "TFCMP2", + 19, + 1 + ], + [ + "TFCMP1", + 18, + 1 + ], + [ + "TF1RST", + 17, + 1 + ], + [ + "TF1SET", + 16, + 1 + ], + [ + "TACMP2", + 15, + 1 + ], + [ + "TACMP1", + 14, + 1 + ], + [ + "TA1RST", + 13, + 1 + ], + [ + "TA1SET", + 12, + 1 + ], + [ + "EXEV10CPT", + 11, + 1 + ], + [ + "EXEV9CPT", + 10, + 1 + ], + [ + "EXEV8CPT", + 9, + 1 + ], + [ + "EXEV7CPT", + 8, + 1 + ], + [ + "EXEV6CPT", + 7, + 1 + ], + [ + "EXEV5CPT", + 6, + 1 + ], + [ + "EXEV4CPT", + 5, + 1 + ], + [ + "EXEV3CPT", + 4, + 1 + ], + [ + "EXEV2CPT", + 3, + 1 + ], + [ + "EXEV1CPT", + 2, + 1 + ], + [ + "UDPCPT", + 1, + 1 + ], + [ + "SWCPT", + 0, + 1 + ] + ] + }, + { + "name": "OUTBR", + "offset": "0x64", + "fields": [ + [ + "DIDL2", + 23, + 1 + ], + [ + "CHP2", + 22, + 1 + ], + [ + "FAULT2", + 20, + 2 + ], + [ + "IDLES2", + 19, + 1 + ], + [ + "IDLEM2", + 18, + 1 + ], + [ + "POL2", + 17, + 1 + ], + [ + "BIAR", + 14, + 1 + ], + [ + "DLYPRT", + 10, + 3 + ], + [ + "DLYPRTEN", + 9, + 1 + ], + [ + "DTEN", + 8, + 1 + ], + [ + "DIDL1", + 7, + 1 + ], + [ + "CHP1", + 6, + 1 + ], + [ + "FAULT1", + 4, + 2 + ], + [ + "IDLES1", + 3, + 1 + ], + [ + "IDLEM1", + 2, + 1 + ], + [ + "POL1", + 1, + 1 + ] + ] + }, + { + "name": "FLTBR", + "offset": "0x68", + "fields": [ + [ + "FLTLCK", + 31, + 1 + ], + [ + "FLT6EN", + 5, + 1 + ], + [ + "FLT5EN", + 4, + 1 + ], + [ + "FLT4EN", + 3, + 1 + ], + [ + "FLT3EN", + 2, + 1 + ], + [ + "FLT2EN", + 1, + 1 + ], + [ + "FLT1EN", + 0, + 1 + ] + ] + }, + { + "name": "TIMBCR2", + "offset": "0x6C", + "fields": [ + [ + "TRGHLF", + 20, + 1 + ], + [ + "GTCMP3", + 17, + 1 + ], + [ + "GTCMP1", + 16, + 1 + ], + [ + "FEROM", + 14, + 2 + ], + [ + "BMROM", + 12, + 2 + ], + [ + "ADROM", + 10, + 2 + ], + [ + "OUTROM", + 8, + 2 + ], + [ + "ROM", + 6, + 2 + ], + [ + "UDM", + 4, + 1 + ], + [ + "DCDR", + 2, + 1 + ], + [ + "DCDS", + 1, + 1 + ], + [ + "DCDE", + 0, + 1 + ] + ] + }, + { + "name": "BEEFR3", + "offset": "0x70", + "fields": [ + [ + "EEVACNT", + 8, + 6 + ], + [ + "EEVASEL", + 4, + 4 + ], + [ + "EEVARSTM", + 2, + 1 + ], + [ + "EEVACRES", + 1, + 1 + ], + [ + "EEVACE", + 0, + 1 + ] + ] + } + ] + }, + { + "name": "HRTIM_TIMC", + "base": "0x40016980", + "interrupts": [ + "HRTIM_TIMC_IRQn" + ], + "registers": [ + { + "name": "TIMCCR", + "offset": "0x00", + "fields": [ + [ + "UPDGAT", + 28, + 4 + ], + [ + "PREEN", + 27, + 1 + ], + [ + "DACSYNC", + 25, + 2 + ], + [ + "MSTU", + 24, + 1 + ], + [ + "TEU", + 23, + 1 + ], + [ + "TDU", + 22, + 1 + ], + [ + "TBU", + 20, + 1 + ], + [ + "TAU", + 19, + 1 + ], + [ + "TxRSTU", + 18, + 1 + ], + [ + "TxREPU", + 17, + 1 + ], + [ + "TFU", + 16, + 1 + ], + [ + "DELCMP4", + 14, + 2 + ], + [ + "DELCMP2", + 12, + 2 + ], + [ + "SYNCSTRTx", + 11, + 1 + ], + [ + "SYNCRSTx", + 10, + 1 + ], + [ + "RSYNCU", + 9, + 1 + ], + [ + "INTLVD", + 7, + 2 + ], + [ + "PSHPLL", + 6, + 1 + ], + [ + "HALF", + 5, + 1 + ], + [ + "RETRIG", + 4, + 1 + ], + [ + "CONT", + 3, + 1 + ], + [ + "CK_PSCx", + 0, + 3 + ] + ] + }, + { + "name": "TIMCISR", + "offset": "0x04", + "fields": [ + [ + "O2CPY", + 21, + 1, + "r" + ], + [ + "O1CPY", + 20, + 1, + "r" + ], + [ + "O2STAT", + 19, + 1, + "r" + ], + [ + "O1STAT", + 18, + 1, + "r" + ], + [ + "IPPSTAT", + 17, + 1, + "r" + ], + [ + "CPPSTAT", + 16, + 1, + "r" + ], + [ + "DLYPRT", + 14, + 1, + "r" + ], + [ + "RST", + 13, + 1, + "r" + ], + [ + "RSTx2", + 12, + 1, + "r" + ], + [ + "SETx2", + 11, + 1, + "r" + ], + [ + "RSTx1", + 10, + 1, + "r" + ], + [ + "SETx1", + 9, + 1, + "r" + ], + [ + "CPT2", + 8, + 1, + "r" + ], + [ + "CPT1", + 7, + 1, + "r" + ], + [ + "UPD", + 6, + 1, + "r" + ], + [ + "REP", + 4, + 1, + "r" + ], + [ + "CMP4", + 3, + 1, + "r" + ], + [ + "CMP3", + 2, + 1, + "r" + ], + [ + "CMP2", + 1, + 1, + "r" + ], + [ + "CMP1", + 0, + 1, + "r" + ] + ] + }, + { + "name": "TIMCICR", + "offset": "0x08", + "fields": [ + [ + "DLYPRTC", + 14, + 1, + "w" + ], + [ + "RSTC", + 13, + 1, + "w" + ], + [ + "RSTx2C", + 12, + 1, + "w" + ], + [ + "SET2xC", + 11, + 1, + "w" + ], + [ + "RSTx1C", + 10, + 1, + "w" + ], + [ + "SET1xC", + 9, + 1, + "w" + ], + [ + "CPT2C", + 8, + 1, + "w" + ], + [ + "CPT1C", + 7, + 1, + "w" + ], + [ + "UPDC", + 6, + 1, + "w" + ], + [ + "REPC", + 4, + 1, + "w" + ], + [ + "CMP4C", + 3, + 1, + "w" + ], + [ + "CMP3C", + 2, + 1, + "w" + ], + [ + "CMP2C", + 1, + 1, + "w" + ], + [ + "CMP1C", + 0, + 1, + "w" + ] + ] + }, + { + "name": "TIMCDIER", + "offset": "0x0C", + "fields": [ + [ + "DLYPRTDE", + 30, + 1 + ], + [ + "RSTDE", + 29, + 1 + ], + [ + "RSTx2DE", + 28, + 1 + ], + [ + "SETx2DE", + 27, + 1 + ], + [ + "RSTx1DE", + 26, + 1 + ], + [ + "SET1xDE", + 25, + 1 + ], + [ + "CPT2DE", + 24, + 1 + ], + [ + "CPT1DE", + 23, + 1 + ], + [ + "UPDDE", + 22, + 1 + ], + [ + "REPDE", + 20, + 1 + ], + [ + "CMP4DE", + 19, + 1 + ], + [ + "CMP3DE", + 18, + 1 + ], + [ + "CMP2DE", + 17, + 1 + ], + [ + "CMP1DE", + 16, + 1 + ], + [ + "DLYPRTIE", + 14, + 1 + ], + [ + "RSTIE", + 13, + 1 + ], + [ + "RSTx2IE", + 12, + 1 + ], + [ + "SETx2IE", + 11, + 1 + ], + [ + "RSTx1IE", + 10, + 1 + ], + [ + "SET1xIE", + 9, + 1 + ], + [ + "CPT2IE", + 8, + 1 + ], + [ + "CPT1IE", + 7, + 1 + ], + [ + "UPDIE", + 6, + 1 + ], + [ + "REPIE", + 4, + 1 + ], + [ + "CMP4IE", + 3, + 1 + ], + [ + "CMP3IE", + 2, + 1 + ], + [ + "CMP2IE", + 1, + 1 + ], + [ + "CMP1IE", + 0, + 1 + ] + ] + }, + { + "name": "CNTCR", + "offset": "0x10", + "fields": [ + [ + "CNTx", + 0, + 16 + ] + ] + }, + { + "name": "PERCR", + "offset": "0x14", + "reset": "0x0000FFFF", + "fields": [ + [ + "PERx", + 0, + 16 + ] + ] + }, + { + "name": "REPCR", + "offset": "0x18", + "fields": [ + [ + "REPx", + 0, + 8 + ] + ] + }, + { + "name": "CMP1CR", + "offset": "0x1C", + "fields": [ + [ + "CMP1x", + 0, + 16 + ] + ] + }, + { + "name": "CMP1CCR", + "offset": "0x20", + "fields": [ + [ + "REPx", + 16, + 8 + ], + [ + "CMP1x", + 0, + 16 + ] + ] + }, + { + "name": "CMP2CR", + "offset": "0x24", + "fields": [ + [ + "CMP2x", + 0, + 16 + ] + ] + }, + { + "name": "CMP3CR", + "offset": "0x28", + "fields": [ + [ + "CMP3x", + 0, + 16 + ] + ] + }, + { + "name": "CMP4CR", + "offset": "0x2C", + "fields": [ + [ + "CMP4x", + 0, + 16 + ] + ] + }, + { + "name": "CPT1CR", + "offset": "0x30", + "fields": [ + [ + "CPT1x", + 0, + 16, + "r" + ], + [ + "DIR", + 16, + 1, + "r" + ] + ] + }, + { + "name": "CPT2CR", + "offset": "0x34", + "fields": [ + [ + "CPT2x", + 0, + 16, + "r" + ], + [ + "DIR", + 16, + 1, + "r" + ] + ] + }, + { + "name": "DTCR", + "offset": "0x38", + "fields": [ + [ + "DTFLKx", + 31, + 1 + ], + [ + "DTFSLKx", + 30, + 1 + ], + [ + "SDTFx", + 25, + 1 + ], + [ + "DTFx", + 16, + 9 + ], + [ + "DTRLKx", + 15, + 1 + ], + [ + "DTRSLKx", + 14, + 1 + ], + [ + "DTPRSC", + 10, + 3 + ], + [ + "SDTRx", + 9, + 1 + ], + [ + "DTRx", + 0, + 9 + ] + ] + }, + { + "name": "SETC1R", + "offset": "0x3C", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SST", + 0, + 1 + ] + ] + }, + { + "name": "RSTC1R", + "offset": "0x40", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SRT", + 0, + 1 + ] + ] + }, + { + "name": "SETC2R", + "offset": "0x44", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SST", + 0, + 1 + ] + ] + }, + { + "name": "RSTC2R", + "offset": "0x48", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SRT", + 0, + 1 + ] + ] + }, + { + "name": "EEFCR1", + "offset": "0x4C", + "fields": [ + [ + "EE5FLTR", + 25, + 4 + ], + [ + "EE5LTCH", + 24, + 1 + ], + [ + "EE4FLTR", + 19, + 4 + ], + [ + "EE4LTCH", + 18, + 1 + ], + [ + "EE3FLTR", + 13, + 4 + ], + [ + "EE3LTCH", + 12, + 1 + ], + [ + "EE2FLTR", + 7, + 4 + ], + [ + "EE2LTCH", + 6, + 1 + ], + [ + "EE1FLTR", + 1, + 4 + ], + [ + "EE1LTCH", + 0, + 1 + ] + ] + }, + { + "name": "EEFCR2", + "offset": "0x50", + "fields": [ + [ + "EE10FLTR", + 25, + 4 + ], + [ + "EE10LTCH", + 24, + 1 + ], + [ + "EE9FLTR", + 19, + 4 + ], + [ + "EE9LTCH", + 18, + 1 + ], + [ + "EE8FLTR", + 13, + 4 + ], + [ + "EE8LTCH", + 12, + 1 + ], + [ + "EE7FLTR", + 7, + 4 + ], + [ + "EE7LTCH", + 6, + 1 + ], + [ + "EE6FLTR", + 1, + 4 + ], + [ + "EE6LTCH", + 0, + 1 + ] + ] + }, + { + "name": "RSTCR", + "offset": "0x54", + "fields": [ + [ + "TIMFCPM2", + 31, + 1 + ], + [ + "TIMECMP4", + 30, + 1 + ], + [ + "TIMECMP2", + 29, + 1 + ], + [ + "TIMECMP1", + 28, + 1 + ], + [ + "TIMDCMP4", + 27, + 1 + ], + [ + "TIMDCMP2", + 26, + 1 + ], + [ + "TIMDCMP1", + 25, + 1 + ], + [ + "TIMBCMP4", + 24, + 1 + ], + [ + "TIMBCMP2", + 23, + 1 + ], + [ + "TIMBCMP1", + 22, + 1 + ], + [ + "TIMACMP4", + 21, + 1 + ], + [ + "TIMACMP2", + 20, + 1 + ], + [ + "TIMACMP1", + 19, + 1 + ], + [ + "EXTEVNT10", + 18, + 1 + ], + [ + "EXTEVNT9", + 17, + 1 + ], + [ + "EXTEVNT8", + 16, + 1 + ], + [ + "EXTEVNT7", + 15, + 1 + ], + [ + "EXTEVNT6", + 14, + 1 + ], + [ + "EXTEVNT5", + 13, + 1 + ], + [ + "EXTEVNT4", + 12, + 1 + ], + [ + "EXTEVNT3", + 11, + 1 + ], + [ + "EXTEVNT2", + 10, + 1 + ], + [ + "EXTEVNT1", + 9, + 1 + ], + [ + "MSTCMP4", + 8, + 1 + ], + [ + "MSTCMP3", + 7, + 1 + ], + [ + "MSTCMP2", + 6, + 1 + ], + [ + "MSTCMP1", + 5, + 1 + ], + [ + "MSTPER", + 4, + 1 + ], + [ + "CMP4", + 3, + 1 + ], + [ + "CMP2", + 2, + 1 + ], + [ + "UPDT", + 1, + 1 + ], + [ + "TIMFCMP1", + 0, + 1 + ] + ] + }, + { + "name": "CHPCR", + "offset": "0x58", + "fields": [ + [ + "STRTPW", + 7, + 4 + ], + [ + "CHPDTY", + 4, + 3 + ], + [ + "CHPFRQ", + 0, + 4 + ] + ] + }, + { + "name": "CPT1CCR", + "offset": "0x5C", + "fields": [ + [ + "TECMP2", + 31, + 1 + ], + [ + "TECMP1", + 30, + 1 + ], + [ + "TE1RST", + 29, + 1 + ], + [ + "TE1SET", + 28, + 1 + ], + [ + "TDCMP2", + 27, + 1 + ], + [ + "TDCMP1", + 26, + 1 + ], + [ + "TD1RST", + 25, + 1 + ], + [ + "TD1SET", + 24, + 1 + ], + [ + "TFCMP2", + 23, + 1 + ], + [ + "TFCMP1", + 22, + 1 + ], + [ + "TF1RST", + 21, + 1 + ], + [ + "TF1SET", + 20, + 1 + ], + [ + "TBCMP2", + 19, + 1 + ], + [ + "TBCMP1", + 18, + 1 + ], + [ + "TB1RST", + 17, + 1 + ], + [ + "TB1SET", + 16, + 1 + ], + [ + "TACMP2", + 15, + 1 + ], + [ + "TACMP1", + 14, + 1 + ], + [ + "TA1RST", + 13, + 1 + ], + [ + "TA1SET", + 12, + 1 + ], + [ + "EXEV10CPT", + 11, + 1 + ], + [ + "EXEV9CPT", + 10, + 1 + ], + [ + "EXEV8CPT", + 9, + 1 + ], + [ + "EXEV7CPT", + 8, + 1 + ], + [ + "EXEV6CPT", + 7, + 1 + ], + [ + "EXEV5CPT", + 6, + 1 + ], + [ + "EXEV4CPT", + 5, + 1 + ], + [ + "EXEV3CPT", + 4, + 1 + ], + [ + "EXEV2CPT", + 3, + 1 + ], + [ + "EXEV1CPT", + 2, + 1 + ], + [ + "UDPCPT", + 1, + 1 + ], + [ + "SWCPT", + 0, + 1 + ] + ] + }, + { + "name": "CPT2CCR", + "offset": "0x60", + "fields": [ + [ + "TECMP2", + 31, + 1 + ], + [ + "TECMP1", + 30, + 1 + ], + [ + "TE1RST", + 29, + 1 + ], + [ + "TE1SET", + 28, + 1 + ], + [ + "TDCMP2", + 27, + 1 + ], + [ + "TDCMP1", + 26, + 1 + ], + [ + "TD1RST", + 25, + 1 + ], + [ + "TD1SET", + 24, + 1 + ], + [ + "TF1CMP2", + 23, + 1 + ], + [ + "TF1CMP1", + 22, + 1 + ], + [ + "TF1RST", + 21, + 1 + ], + [ + "TF1SET", + 20, + 1 + ], + [ + "TBCMP2", + 19, + 1 + ], + [ + "TBCMP1", + 18, + 1 + ], + [ + "TB1RST", + 17, + 1 + ], + [ + "TB1SET", + 16, + 1 + ], + [ + "TACMP2", + 15, + 1 + ], + [ + "TACMP1", + 14, + 1 + ], + [ + "TA1RST", + 13, + 1 + ], + [ + "TA1SET", + 12, + 1 + ], + [ + "EXEV10CPT", + 11, + 1 + ], + [ + "EXEV9CPT", + 10, + 1 + ], + [ + "EXEV8CPT", + 9, + 1 + ], + [ + "EXEV7CPT", + 8, + 1 + ], + [ + "EXEV6CPT", + 7, + 1 + ], + [ + "EXEV5CPT", + 6, + 1 + ], + [ + "EXEV4CPT", + 5, + 1 + ], + [ + "EXEV3CPT", + 4, + 1 + ], + [ + "EXEV2CPT", + 3, + 1 + ], + [ + "EXEV1CPT", + 2, + 1 + ], + [ + "UDPCPT", + 1, + 1 + ], + [ + "SWCPT", + 0, + 1 + ] + ] + }, + { + "name": "OUTCR", + "offset": "0x64", + "fields": [ + [ + "DIDL2", + 23, + 1 + ], + [ + "CHP2", + 22, + 1 + ], + [ + "FAULT2", + 20, + 2 + ], + [ + "IDLES2", + 19, + 1 + ], + [ + "IDLEM2", + 18, + 1 + ], + [ + "POL2", + 17, + 1 + ], + [ + "BIAR", + 14, + 1 + ], + [ + "DLYPRT", + 10, + 3 + ], + [ + "DLYPRTEN", + 9, + 1 + ], + [ + "DTEN", + 8, + 1 + ], + [ + "DIDL1", + 7, + 1 + ], + [ + "CHP1", + 6, + 1 + ], + [ + "FAULT1", + 4, + 2 + ], + [ + "IDLES1", + 3, + 1 + ], + [ + "IDLEM1", + 2, + 1 + ], + [ + "POL1", + 1, + 1 + ] + ] + }, + { + "name": "FLTCR", + "offset": "0x68", + "fields": [ + [ + "FLTLCK", + 31, + 1 + ], + [ + "FLT6EN", + 5, + 1 + ], + [ + "FLT5EN", + 4, + 1 + ], + [ + "FLT4EN", + 3, + 1 + ], + [ + "FLT3EN", + 2, + 1 + ], + [ + "FLT2EN", + 1, + 1 + ], + [ + "FLT1EN", + 0, + 1 + ] + ] + }, + { + "name": "TIMCCR2", + "offset": "0x6C", + "fields": [ + [ + "TRGHLF", + 20, + 1 + ], + [ + "GTCMP3", + 17, + 1 + ], + [ + "GTCMP1", + 16, + 1 + ], + [ + "FEROM", + 14, + 2 + ], + [ + "BMROM", + 12, + 2 + ], + [ + "ADROM", + 10, + 2 + ], + [ + "OUTROM", + 8, + 2 + ], + [ + "ROM", + 6, + 2 + ], + [ + "UDM", + 4, + 1 + ], + [ + "DCDR", + 2, + 1 + ], + [ + "DCDS", + 1, + 1 + ], + [ + "DCDE", + 0, + 1 + ] + ] + }, + { + "name": "CEEFR3", + "offset": "0x70", + "fields": [ + [ + "EEVACNT", + 8, + 6 + ], + [ + "EEVASEL", + 4, + 4 + ], + [ + "EEVARSTM", + 2, + 1 + ], + [ + "EEVACRES", + 1, + 1 + ], + [ + "EEVACE", + 0, + 1 + ] + ] + } + ] + }, + { + "name": "HRTIM_TIMD", + "base": "0x40016A00", + "interrupts": [ + "HRTIM_TIMD_IRQn" + ], + "registers": [ + { + "name": "TIMDCR", + "offset": "0x00", + "fields": [ + [ + "UPDGAT", + 28, + 4 + ], + [ + "PREEN", + 27, + 1 + ], + [ + "DACSYNC", + 25, + 2 + ], + [ + "MSTU", + 24, + 1 + ], + [ + "TEU", + 23, + 1 + ], + [ + "TCU", + 21, + 1 + ], + [ + "TBU", + 20, + 1 + ], + [ + "TAU", + 19, + 1 + ], + [ + "TxRSTU", + 18, + 1 + ], + [ + "TxREPU", + 17, + 1 + ], + [ + "TFU", + 16, + 1 + ], + [ + "DELCMP4", + 14, + 2 + ], + [ + "DELCMP2", + 12, + 2 + ], + [ + "SYNCSTRTx", + 11, + 1 + ], + [ + "SYNCRSTx", + 10, + 1 + ], + [ + "RSYNCU", + 9, + 1 + ], + [ + "INTLVD", + 7, + 2 + ], + [ + "PSHPLL", + 6, + 1 + ], + [ + "HALF", + 5, + 1 + ], + [ + "RETRIG", + 4, + 1 + ], + [ + "CONT", + 3, + 1 + ], + [ + "CK_PSCx", + 0, + 3 + ] + ] + }, + { + "name": "TIMDISR", + "offset": "0x04", + "fields": [ + [ + "O2CPY", + 21, + 1, + "r" + ], + [ + "O1CPY", + 20, + 1, + "r" + ], + [ + "O2STAT", + 19, + 1, + "r" + ], + [ + "O1STAT", + 18, + 1, + "r" + ], + [ + "IPPSTAT", + 17, + 1, + "r" + ], + [ + "CPPSTAT", + 16, + 1, + "r" + ], + [ + "DLYPRT", + 14, + 1, + "r" + ], + [ + "RST", + 13, + 1, + "r" + ], + [ + "RSTx2", + 12, + 1, + "r" + ], + [ + "SETx2", + 11, + 1, + "r" + ], + [ + "RSTx1", + 10, + 1, + "r" + ], + [ + "SETx1", + 9, + 1, + "r" + ], + [ + "CPT2", + 8, + 1, + "r" + ], + [ + "CPT1", + 7, + 1, + "r" + ], + [ + "UPD", + 6, + 1, + "r" + ], + [ + "REP", + 4, + 1, + "r" + ], + [ + "CMP4", + 3, + 1, + "r" + ], + [ + "CMP3", + 2, + 1, + "r" + ], + [ + "CMP2", + 1, + 1, + "r" + ], + [ + "CMP1", + 0, + 1, + "r" + ] + ] + }, + { + "name": "TIMDICR", + "offset": "0x08", + "fields": [ + [ + "DLYPRTC", + 14, + 1, + "w" + ], + [ + "RSTC", + 13, + 1, + "w" + ], + [ + "RSTx2C", + 12, + 1, + "w" + ], + [ + "SET2xC", + 11, + 1, + "w" + ], + [ + "RSTx1C", + 10, + 1, + "w" + ], + [ + "SET1xC", + 9, + 1, + "w" + ], + [ + "CPT2C", + 8, + 1, + "w" + ], + [ + "CPT1C", + 7, + 1, + "w" + ], + [ + "UPDC", + 6, + 1, + "w" + ], + [ + "REPC", + 4, + 1, + "w" + ], + [ + "CMP4C", + 3, + 1, + "w" + ], + [ + "CMP3C", + 2, + 1, + "w" + ], + [ + "CMP2C", + 1, + 1, + "w" + ], + [ + "CMP1C", + 0, + 1, + "w" + ] + ] + }, + { + "name": "TIMDDIER", + "offset": "0x0C", + "fields": [ + [ + "DLYPRTDE", + 30, + 1 + ], + [ + "RSTDE", + 29, + 1 + ], + [ + "RSTx2DE", + 28, + 1 + ], + [ + "SETx2DE", + 27, + 1 + ], + [ + "RSTx1DE", + 26, + 1 + ], + [ + "SET1xDE", + 25, + 1 + ], + [ + "CPT2DE", + 24, + 1 + ], + [ + "CPT1DE", + 23, + 1 + ], + [ + "UPDDE", + 22, + 1 + ], + [ + "REPDE", + 20, + 1 + ], + [ + "CMP4DE", + 19, + 1 + ], + [ + "CMP3DE", + 18, + 1 + ], + [ + "CMP2DE", + 17, + 1 + ], + [ + "CMP1DE", + 16, + 1 + ], + [ + "DLYPRTIE", + 14, + 1 + ], + [ + "RSTIE", + 13, + 1 + ], + [ + "RSTx2IE", + 12, + 1 + ], + [ + "SETx2IE", + 11, + 1 + ], + [ + "RSTx1IE", + 10, + 1 + ], + [ + "SET1xIE", + 9, + 1 + ], + [ + "CPT2IE", + 8, + 1 + ], + [ + "CPT1IE", + 7, + 1 + ], + [ + "UPDIE", + 6, + 1 + ], + [ + "REPIE", + 4, + 1 + ], + [ + "CMP4IE", + 3, + 1 + ], + [ + "CMP3IE", + 2, + 1 + ], + [ + "CMP2IE", + 1, + 1 + ], + [ + "CMP1IE", + 0, + 1 + ] + ] + }, + { + "name": "CNTDR", + "offset": "0x10", + "fields": [ + [ + "CNTx", + 0, + 16 + ] + ] + }, + { + "name": "PERDR", + "offset": "0x14", + "reset": "0x0000FFFF", + "fields": [ + [ + "PERx", + 0, + 16 + ] + ] + }, + { + "name": "REPDR", + "offset": "0x18", + "fields": [ + [ + "REPx", + 0, + 8 + ] + ] + }, + { + "name": "CMP1DR", + "offset": "0x1C", + "fields": [ + [ + "CMP1x", + 0, + 16 + ] + ] + }, + { + "name": "CMP1CDR", + "offset": "0x20", + "fields": [ + [ + "REPx", + 16, + 8 + ], + [ + "CMP1x", + 0, + 16 + ] + ] + }, + { + "name": "CMP2DR", + "offset": "0x24", + "fields": [ + [ + "CMP2x", + 0, + 16 + ] + ] + }, + { + "name": "CMP3DR", + "offset": "0x28", + "fields": [ + [ + "CMP3x", + 0, + 16 + ] + ] + }, + { + "name": "CMP4DR", + "offset": "0x2C", + "fields": [ + [ + "CMP4x", + 0, + 16 + ] + ] + }, + { + "name": "CPT1DR", + "offset": "0x30", + "fields": [ + [ + "CPT1x", + 0, + 16, + "r" + ], + [ + "DIR", + 16, + 1, + "r" + ] + ] + }, + { + "name": "CPT2DR", + "offset": "0x34", + "fields": [ + [ + "CPT2x", + 0, + 16, + "r" + ], + [ + "DIR", + 16, + 1, + "r" + ] + ] + }, + { + "name": "DTDR", + "offset": "0x38", + "fields": [ + [ + "DTFLKx", + 31, + 1 + ], + [ + "DTFSLKx", + 30, + 1 + ], + [ + "SDTFx", + 25, + 1 + ], + [ + "DTFx", + 16, + 9 + ], + [ + "DTRLKx", + 15, + 1 + ], + [ + "DTRSLKx", + 14, + 1 + ], + [ + "DTPRSC", + 10, + 3 + ], + [ + "SDTRx", + 9, + 1 + ], + [ + "DTRx", + 0, + 9 + ] + ] + }, + { + "name": "SETD1R", + "offset": "0x3C", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SST", + 0, + 1 + ] + ] + }, + { + "name": "RSTD1R", + "offset": "0x40", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SRT", + 0, + 1 + ] + ] + }, + { + "name": "SETD2R", + "offset": "0x44", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SST", + 0, + 1 + ] + ] + }, + { + "name": "RSTD2R", + "offset": "0x48", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SRT", + 0, + 1 + ] + ] + }, + { + "name": "EEFDR1", + "offset": "0x4C", + "fields": [ + [ + "EE5FLTR", + 25, + 4 + ], + [ + "EE5LTCH", + 24, + 1 + ], + [ + "EE4FLTR", + 19, + 4 + ], + [ + "EE4LTCH", + 18, + 1 + ], + [ + "EE3FLTR", + 13, + 4 + ], + [ + "EE3LTCH", + 12, + 1 + ], + [ + "EE2FLTR", + 7, + 4 + ], + [ + "EE2LTCH", + 6, + 1 + ], + [ + "EE1FLTR", + 1, + 4 + ], + [ + "EE1LTCH", + 0, + 1 + ] + ] + }, + { + "name": "EEFDR2", + "offset": "0x50", + "fields": [ + [ + "EE10FLTR", + 25, + 4 + ], + [ + "EE10LTCH", + 24, + 1 + ], + [ + "EE9FLTR", + 19, + 4 + ], + [ + "EE9LTCH", + 18, + 1 + ], + [ + "EE8FLTR", + 13, + 4 + ], + [ + "EE8LTCH", + 12, + 1 + ], + [ + "EE7FLTR", + 7, + 4 + ], + [ + "EE7LTCH", + 6, + 1 + ], + [ + "EE6FLTR", + 1, + 4 + ], + [ + "EE6LTCH", + 0, + 1 + ] + ] + }, + { + "name": "RSTDR", + "offset": "0x54", + "fields": [ + [ + "TIMFCPM2", + 31, + 1 + ], + [ + "TIMECMP4", + 30, + 1 + ], + [ + "TIMECMP2", + 29, + 1 + ], + [ + "TIMECMP1", + 28, + 1 + ], + [ + "TIMCCMP4", + 27, + 1 + ], + [ + "TIMCCMP2", + 26, + 1 + ], + [ + "TIMCCMP1", + 25, + 1 + ], + [ + "TIMBCMP4", + 24, + 1 + ], + [ + "TIMBCMP2", + 23, + 1 + ], + [ + "TIMBCMP1", + 22, + 1 + ], + [ + "TIMACMP4", + 21, + 1 + ], + [ + "TIMACMP2", + 20, + 1 + ], + [ + "TIMACMP1", + 19, + 1 + ], + [ + "EXTEVNT10", + 18, + 1 + ], + [ + "EXTEVNT9", + 17, + 1 + ], + [ + "EXTEVNT8", + 16, + 1 + ], + [ + "EXTEVNT7", + 15, + 1 + ], + [ + "EXTEVNT6", + 14, + 1 + ], + [ + "EXTEVNT5", + 13, + 1 + ], + [ + "EXTEVNT4", + 12, + 1 + ], + [ + "EXTEVNT3", + 11, + 1 + ], + [ + "EXTEVNT2", + 10, + 1 + ], + [ + "EXTEVNT1", + 9, + 1 + ], + [ + "MSTCMP4", + 8, + 1 + ], + [ + "MSTCMP3", + 7, + 1 + ], + [ + "MSTCMP2", + 6, + 1 + ], + [ + "MSTCMP1", + 5, + 1 + ], + [ + "MSTPER", + 4, + 1 + ], + [ + "CMP4", + 3, + 1 + ], + [ + "CMP2", + 2, + 1 + ], + [ + "UPDT", + 1, + 1 + ], + [ + "TIMFCMP1", + 0, + 1 + ] + ] + }, + { + "name": "CHPDR", + "offset": "0x58", + "fields": [ + [ + "STRTPW", + 7, + 4 + ], + [ + "CHPDTY", + 4, + 3 + ], + [ + "CHPFRQ", + 0, + 4 + ] + ] + }, + { + "name": "CPT1DCR", + "offset": "0x5C", + "fields": [ + [ + "TECMP2", + 31, + 1 + ], + [ + "TECMP1", + 30, + 1 + ], + [ + "TE1RST", + 29, + 1 + ], + [ + "TE1SET", + 28, + 1 + ], + [ + "TFCMP2", + 27, + 1 + ], + [ + "TFCMP1", + 26, + 1 + ], + [ + "TF1RST", + 25, + 1 + ], + [ + "TF1SET", + 24, + 1 + ], + [ + "TCCMP2", + 23, + 1 + ], + [ + "TCCMP1", + 22, + 1 + ], + [ + "TC1RST", + 21, + 1 + ], + [ + "TC1SET", + 20, + 1 + ], + [ + "TBCMP2", + 19, + 1 + ], + [ + "TBCMP1", + 18, + 1 + ], + [ + "TB1RST", + 17, + 1 + ], + [ + "TB1SET", + 16, + 1 + ], + [ + "TACMP2", + 15, + 1 + ], + [ + "TACMP1", + 14, + 1 + ], + [ + "TA1RST", + 13, + 1 + ], + [ + "TA1SET", + 12, + 1 + ], + [ + "EXEV10CPT", + 11, + 1 + ], + [ + "EXEV9CPT", + 10, + 1 + ], + [ + "EXEV8CPT", + 9, + 1 + ], + [ + "EXEV7CPT", + 8, + 1 + ], + [ + "EXEV6CPT", + 7, + 1 + ], + [ + "EXEV5CPT", + 6, + 1 + ], + [ + "EXEV4CPT", + 5, + 1 + ], + [ + "EXEV3CPT", + 4, + 1 + ], + [ + "EXEV2CPT", + 3, + 1 + ], + [ + "EXEV1CPT", + 2, + 1 + ], + [ + "UDPCPT", + 1, + 1 + ], + [ + "SWCPT", + 0, + 1 + ] + ] + }, + { + "name": "CPT2DCR", + "offset": "0x60", + "fields": [ + [ + "TECMP2", + 31, + 1 + ], + [ + "TECMP1", + 30, + 1 + ], + [ + "TE1RST", + 29, + 1 + ], + [ + "TE1SET", + 28, + 1 + ], + [ + "TFCMP2", + 27, + 1 + ], + [ + "TFCMP1", + 26, + 1 + ], + [ + "TF1RST", + 25, + 1 + ], + [ + "TF1SET", + 24, + 1 + ], + [ + "TCCMP2", + 23, + 1 + ], + [ + "TCCMP1", + 22, + 1 + ], + [ + "TC1RST", + 21, + 1 + ], + [ + "TC1SET", + 20, + 1 + ], + [ + "TBCMP2", + 19, + 1 + ], + [ + "TBCMP1", + 18, + 1 + ], + [ + "TB1RST", + 17, + 1 + ], + [ + "TB1SET", + 16, + 1 + ], + [ + "TACMP2", + 15, + 1 + ], + [ + "TACMP1", + 14, + 1 + ], + [ + "TA1RST", + 13, + 1 + ], + [ + "TA1SET", + 12, + 1 + ], + [ + "EXEV10CPT", + 11, + 1 + ], + [ + "EXEV9CPT", + 10, + 1 + ], + [ + "EXEV8CPT", + 9, + 1 + ], + [ + "EXEV7CPT", + 8, + 1 + ], + [ + "EXEV6CPT", + 7, + 1 + ], + [ + "EXEV5CPT", + 6, + 1 + ], + [ + "EXEV4CPT", + 5, + 1 + ], + [ + "EXEV3CPT", + 4, + 1 + ], + [ + "EXEV2CPT", + 3, + 1 + ], + [ + "EXEV1CPT", + 2, + 1 + ], + [ + "UDPCPT", + 1, + 1 + ], + [ + "SWCPT", + 0, + 1 + ] + ] + }, + { + "name": "OUTDR", + "offset": "0x64", + "fields": [ + [ + "DIDL2", + 23, + 1 + ], + [ + "CHP2", + 22, + 1 + ], + [ + "FAULT2", + 20, + 2 + ], + [ + "IDLES2", + 19, + 1 + ], + [ + "IDLEM2", + 18, + 1 + ], + [ + "POL2", + 17, + 1 + ], + [ + "BIAR", + 14, + 1 + ], + [ + "DLYPRT", + 10, + 3 + ], + [ + "DLYPRTEN", + 9, + 1 + ], + [ + "DTEN", + 8, + 1 + ], + [ + "DIDL1", + 7, + 1 + ], + [ + "CHP1", + 6, + 1 + ], + [ + "FAULT1", + 4, + 2 + ], + [ + "IDLES1", + 3, + 1 + ], + [ + "IDLEM1", + 2, + 1 + ], + [ + "POL1", + 1, + 1 + ] + ] + }, + { + "name": "FLTDR", + "offset": "0x68", + "fields": [ + [ + "FLTLCK", + 31, + 1 + ], + [ + "FLT6EN", + 5, + 1 + ], + [ + "FLT5EN", + 4, + 1 + ], + [ + "FLT4EN", + 3, + 1 + ], + [ + "FLT3EN", + 2, + 1 + ], + [ + "FLT2EN", + 1, + 1 + ], + [ + "FLT1EN", + 0, + 1 + ] + ] + }, + { + "name": "TIMDCR2", + "offset": "0x6C", + "fields": [ + [ + "TRGHLF", + 20, + 1 + ], + [ + "GTCMP3", + 17, + 1 + ], + [ + "GTCMP1", + 16, + 1 + ], + [ + "FEROM", + 14, + 2 + ], + [ + "BMROM", + 12, + 2 + ], + [ + "ADROM", + 10, + 2 + ], + [ + "OUTROM", + 8, + 2 + ], + [ + "ROM", + 6, + 2 + ], + [ + "UDM", + 4, + 1 + ], + [ + "DCDR", + 2, + 1 + ], + [ + "DCDS", + 1, + 1 + ], + [ + "DCDE", + 0, + 1 + ] + ] + }, + { + "name": "DEEFR3", + "offset": "0x70", + "fields": [ + [ + "EEVACNT", + 8, + 6 + ], + [ + "EEVASEL", + 4, + 4 + ], + [ + "EEVARSTM", + 2, + 1 + ], + [ + "EEVACRES", + 1, + 1 + ], + [ + "EEVACE", + 0, + 1 + ] + ] + } + ] + }, + { + "name": "HRTIM_TIME", + "base": "0x40016A80", + "registers": [ + { + "name": "TIMECR", + "offset": "0x00", + "fields": [ + [ + "UPDGAT", + 28, + 4 + ], + [ + "PREEN", + 27, + 1 + ], + [ + "DACSYNC", + 25, + 2 + ], + [ + "MSTU", + 24, + 1 + ], + [ + "TDU", + 22, + 1 + ], + [ + "TCU", + 21, + 1 + ], + [ + "TBU", + 20, + 1 + ], + [ + "TAU", + 19, + 1 + ], + [ + "TxRSTU", + 18, + 1 + ], + [ + "TxREPU", + 17, + 1 + ], + [ + "TFU", + 16, + 1 + ], + [ + "DELCMP4", + 14, + 2 + ], + [ + "DELCMP2", + 12, + 2 + ], + [ + "SYNCSTRTx", + 11, + 1 + ], + [ + "SYNCRSTx", + 10, + 1 + ], + [ + "RSYNCU", + 9, + 1 + ], + [ + "INTLVD", + 7, + 2 + ], + [ + "PSHPLL", + 6, + 1 + ], + [ + "HALF", + 5, + 1 + ], + [ + "RETRIG", + 4, + 1 + ], + [ + "CONT", + 3, + 1 + ], + [ + "CK_PSCx", + 0, + 3 + ] + ] + }, + { + "name": "TIMEISR", + "offset": "0x04", + "fields": [ + [ + "O2CPY", + 21, + 1, + "r" + ], + [ + "O1CPY", + 20, + 1, + "r" + ], + [ + "O2STAT", + 19, + 1, + "r" + ], + [ + "O1STAT", + 18, + 1, + "r" + ], + [ + "IPPSTAT", + 17, + 1, + "r" + ], + [ + "CPPSTAT", + 16, + 1, + "r" + ], + [ + "DLYPRT", + 14, + 1, + "r" + ], + [ + "RST", + 13, + 1, + "r" + ], + [ + "RSTx2", + 12, + 1, + "r" + ], + [ + "SETx2", + 11, + 1, + "r" + ], + [ + "RSTx1", + 10, + 1, + "r" + ], + [ + "SETx1", + 9, + 1, + "r" + ], + [ + "CPT2", + 8, + 1, + "r" + ], + [ + "CPT1", + 7, + 1, + "r" + ], + [ + "UPD", + 6, + 1, + "r" + ], + [ + "REP", + 4, + 1, + "r" + ], + [ + "CMP4", + 3, + 1, + "r" + ], + [ + "CMP3", + 2, + 1, + "r" + ], + [ + "CMP2", + 1, + 1, + "r" + ], + [ + "CMP1", + 0, + 1, + "r" + ] + ] + }, + { + "name": "TIMEICR", + "offset": "0x08", + "fields": [ + [ + "DLYPRTC", + 14, + 1, + "w" + ], + [ + "RSTC", + 13, + 1, + "w" + ], + [ + "RSTx2C", + 12, + 1, + "w" + ], + [ + "SET2xC", + 11, + 1, + "w" + ], + [ + "RSTx1C", + 10, + 1, + "w" + ], + [ + "SET1xC", + 9, + 1, + "w" + ], + [ + "CPT2C", + 8, + 1, + "w" + ], + [ + "CPT1C", + 7, + 1, + "w" + ], + [ + "UPDC", + 6, + 1, + "w" + ], + [ + "REPC", + 4, + 1, + "w" + ], + [ + "CMP4C", + 3, + 1, + "w" + ], + [ + "CMP3C", + 2, + 1, + "w" + ], + [ + "CMP2C", + 1, + 1, + "w" + ], + [ + "CMP1C", + 0, + 1, + "w" + ] + ] + }, + { + "name": "TIMEDIER", + "offset": "0x0C", + "fields": [ + [ + "DLYPRTDE", + 30, + 1 + ], + [ + "RSTDE", + 29, + 1 + ], + [ + "RSTx2DE", + 28, + 1 + ], + [ + "SETx2DE", + 27, + 1 + ], + [ + "RSTx1DE", + 26, + 1 + ], + [ + "SET1xDE", + 25, + 1 + ], + [ + "CPT2DE", + 24, + 1 + ], + [ + "CPT1DE", + 23, + 1 + ], + [ + "UPDDE", + 22, + 1 + ], + [ + "REPDE", + 20, + 1 + ], + [ + "CMP4DE", + 19, + 1 + ], + [ + "CMP3DE", + 18, + 1 + ], + [ + "CMP2DE", + 17, + 1 + ], + [ + "CMP1DE", + 16, + 1 + ], + [ + "DLYPRTIE", + 14, + 1 + ], + [ + "RSTIE", + 13, + 1 + ], + [ + "RSTx2IE", + 12, + 1 + ], + [ + "SETx2IE", + 11, + 1 + ], + [ + "RSTx1IE", + 10, + 1 + ], + [ + "SET1xIE", + 9, + 1 + ], + [ + "CPT2IE", + 8, + 1 + ], + [ + "CPT1IE", + 7, + 1 + ], + [ + "UPDIE", + 6, + 1 + ], + [ + "REPIE", + 4, + 1 + ], + [ + "CMP4IE", + 3, + 1 + ], + [ + "CMP3IE", + 2, + 1 + ], + [ + "CMP2IE", + 1, + 1 + ], + [ + "CMP1IE", + 0, + 1 + ] + ] + }, + { + "name": "CNTER", + "offset": "0x10", + "fields": [ + [ + "CNTx", + 0, + 16 + ] + ] + }, + { + "name": "PERER", + "offset": "0x14", + "reset": "0x0000FFFF", + "fields": [ + [ + "PERx", + 0, + 16 + ] + ] + }, + { + "name": "REPER", + "offset": "0x18", + "fields": [ + [ + "REPx", + 0, + 8 + ] + ] + }, + { + "name": "CMP1ER", + "offset": "0x1C", + "fields": [ + [ + "CMP1x", + 0, + 16 + ] + ] + }, + { + "name": "CMP1CER", + "offset": "0x20", + "fields": [ + [ + "REPx", + 16, + 8 + ], + [ + "CMP1x", + 0, + 16 + ] + ] + }, + { + "name": "CMP2ER", + "offset": "0x24", + "fields": [ + [ + "CMP2x", + 0, + 16 + ] + ] + }, + { + "name": "CMP3ER", + "offset": "0x28", + "fields": [ + [ + "CMP3x", + 0, + 16 + ] + ] + }, + { + "name": "CMP4ER", + "offset": "0x2C", + "fields": [ + [ + "CMP4x", + 0, + 16 + ] + ] + }, + { + "name": "CPT1ER", + "offset": "0x30", + "fields": [ + [ + "CPT1x", + 0, + 16, + "r" + ], + [ + "DIR", + 16, + 1, + "r" + ] + ] + }, + { + "name": "CPT2ER", + "offset": "0x34", + "fields": [ + [ + "CPT2x", + 0, + 16, + "r" + ], + [ + "DIR", + 16, + 1, + "r" + ] + ] + }, + { + "name": "DTER", + "offset": "0x38", + "fields": [ + [ + "DTFLKx", + 31, + 1 + ], + [ + "DTFSLKx", + 30, + 1 + ], + [ + "SDTFx", + 25, + 1 + ], + [ + "DTFx", + 16, + 9 + ], + [ + "DTRLKx", + 15, + 1 + ], + [ + "DTRSLKx", + 14, + 1 + ], + [ + "DTPRSC", + 10, + 3 + ], + [ + "SDTRx", + 9, + 1 + ], + [ + "DTRx", + 0, + 9 + ] + ] + }, + { + "name": "SETE1R", + "offset": "0x3C", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SST", + 0, + 1 + ] + ] + }, + { + "name": "RSTE1R", + "offset": "0x40", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SRT", + 0, + 1 + ] + ] + }, + { + "name": "SETE2R", + "offset": "0x44", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SST", + 0, + 1 + ] + ] + }, + { + "name": "RSTE2R", + "offset": "0x48", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SRT", + 0, + 1 + ] + ] + }, + { + "name": "EEFER1", + "offset": "0x4C", + "fields": [ + [ + "EE5FLTR", + 25, + 4 + ], + [ + "EE5LTCH", + 24, + 1 + ], + [ + "EE4FLTR", + 19, + 4 + ], + [ + "EE4LTCH", + 18, + 1 + ], + [ + "EE3FLTR", + 13, + 4 + ], + [ + "EE3LTCH", + 12, + 1 + ], + [ + "EE2FLTR", + 7, + 4 + ], + [ + "EE2LTCH", + 6, + 1 + ], + [ + "EE1FLTR", + 1, + 4 + ], + [ + "EE1LTCH", + 0, + 1 + ] + ] + }, + { + "name": "EEFER2", + "offset": "0x50", + "fields": [ + [ + "EE10FLTR", + 25, + 4 + ], + [ + "EE10LTCH", + 24, + 1 + ], + [ + "EE9FLTR", + 19, + 4 + ], + [ + "EE9LTCH", + 18, + 1 + ], + [ + "EE8FLTR", + 13, + 4 + ], + [ + "EE8LTCH", + 12, + 1 + ], + [ + "EE7FLTR", + 7, + 4 + ], + [ + "EE7LTCH", + 6, + 1 + ], + [ + "EE6FLTR", + 1, + 4 + ], + [ + "EE6LTCH", + 0, + 1 + ] + ] + }, + { + "name": "RSTER", + "offset": "0x54", + "fields": [ + [ + "TIMFCPM2", + 31, + 1 + ], + [ + "TIMDCMP4", + 30, + 1 + ], + [ + "TIMDCMP2", + 29, + 1 + ], + [ + "TIMDCMP1", + 28, + 1 + ], + [ + "TIMCCMP4", + 27, + 1 + ], + [ + "TIMCCMP2", + 26, + 1 + ], + [ + "TIMCCMP1", + 25, + 1 + ], + [ + "TIMBCMP4", + 24, + 1 + ], + [ + "TIMBCMP2", + 23, + 1 + ], + [ + "TIMBCMP1", + 22, + 1 + ], + [ + "TIMACMP4", + 21, + 1 + ], + [ + "TIMACMP2", + 20, + 1 + ], + [ + "TIMACMP1", + 19, + 1 + ], + [ + "EXTEVNT10", + 18, + 1 + ], + [ + "EXTEVNT9", + 17, + 1 + ], + [ + "EXTEVNT8", + 16, + 1 + ], + [ + "EXTEVNT7", + 15, + 1 + ], + [ + "EXTEVNT6", + 14, + 1 + ], + [ + "EXTEVNT5", + 13, + 1 + ], + [ + "EXTEVNT4", + 12, + 1 + ], + [ + "EXTEVNT3", + 11, + 1 + ], + [ + "EXTEVNT2", + 10, + 1 + ], + [ + "EXTEVNT1", + 9, + 1 + ], + [ + "MSTCMP4", + 8, + 1 + ], + [ + "MSTCMP3", + 7, + 1 + ], + [ + "MSTCMP2", + 6, + 1 + ], + [ + "MSTCMP1", + 5, + 1 + ], + [ + "MSTPER", + 4, + 1 + ], + [ + "CMP4", + 3, + 1 + ], + [ + "CMP2", + 2, + 1 + ], + [ + "UPDT", + 1, + 1 + ], + [ + "TIMFCMP1", + 0, + 1 + ] + ] + }, + { + "name": "CHPER", + "offset": "0x58", + "fields": [ + [ + "STRTPW", + 7, + 4 + ], + [ + "CHPDTY", + 4, + 3 + ], + [ + "CHPFRQ", + 0, + 4 + ] + ] + }, + { + "name": "CPT1ECR", + "offset": "0x5C", + "fields": [ + [ + "TFCMP2", + 31, + 1 + ], + [ + "TFCMP1", + 30, + 1 + ], + [ + "TF1RST", + 29, + 1 + ], + [ + "TF1SET", + 28, + 1 + ], + [ + "TDCMP2", + 27, + 1 + ], + [ + "TDCMP1", + 26, + 1 + ], + [ + "TD1RST", + 25, + 1 + ], + [ + "TD1SET", + 24, + 1 + ], + [ + "TCCMP2", + 23, + 1 + ], + [ + "TCCMP1", + 22, + 1 + ], + [ + "TC1RST", + 21, + 1 + ], + [ + "TC1SET", + 20, + 1 + ], + [ + "TBCMP2", + 19, + 1 + ], + [ + "TBCMP1", + 18, + 1 + ], + [ + "TB1RST", + 17, + 1 + ], + [ + "TB1SET", + 16, + 1 + ], + [ + "TACMP2", + 15, + 1 + ], + [ + "TACMP1", + 14, + 1 + ], + [ + "TA1RST", + 13, + 1 + ], + [ + "TA1SET", + 12, + 1 + ], + [ + "EXEV10CPT", + 11, + 1 + ], + [ + "EXEV9CPT", + 10, + 1 + ], + [ + "EXEV8CPT", + 9, + 1 + ], + [ + "EXEV7CPT", + 8, + 1 + ], + [ + "EXEV6CPT", + 7, + 1 + ], + [ + "EXEV5CPT", + 6, + 1 + ], + [ + "EXEV4CPT", + 5, + 1 + ], + [ + "EXEV3CPT", + 4, + 1 + ], + [ + "EXEV2CPT", + 3, + 1 + ], + [ + "EXEV1CPT", + 2, + 1 + ], + [ + "UDPCPT", + 1, + 1 + ], + [ + "SWCPT", + 0, + 1 + ] + ] + }, + { + "name": "CPT2ECR", + "offset": "0x60", + "fields": [ + [ + "TFCMP2", + 31, + 1 + ], + [ + "TFCMP1", + 30, + 1 + ], + [ + "TF1RST", + 29, + 1 + ], + [ + "TF1SET", + 28, + 1 + ], + [ + "TDCMP2", + 27, + 1 + ], + [ + "TDCMP1", + 26, + 1 + ], + [ + "TD1RST", + 25, + 1 + ], + [ + "TD1SET", + 24, + 1 + ], + [ + "TCCMP2", + 23, + 1 + ], + [ + "TCCMP1", + 22, + 1 + ], + [ + "TC1RST", + 21, + 1 + ], + [ + "TC1SET", + 20, + 1 + ], + [ + "TBCMP2", + 19, + 1 + ], + [ + "TBCMP1", + 18, + 1 + ], + [ + "TB1RST", + 17, + 1 + ], + [ + "TB1SET", + 16, + 1 + ], + [ + "TACMP2", + 15, + 1 + ], + [ + "TACMP1", + 14, + 1 + ], + [ + "TA1RST", + 13, + 1 + ], + [ + "TA1SET", + 12, + 1 + ], + [ + "EXEV10CPT", + 11, + 1 + ], + [ + "EXEV9CPT", + 10, + 1 + ], + [ + "EXEV8CPT", + 9, + 1 + ], + [ + "EXEV7CPT", + 8, + 1 + ], + [ + "EXEV6CPT", + 7, + 1 + ], + [ + "EXEV5CPT", + 6, + 1 + ], + [ + "EXEV4CPT", + 5, + 1 + ], + [ + "EXEV3CPT", + 4, + 1 + ], + [ + "EXEV2CPT", + 3, + 1 + ], + [ + "EXEV1CPT", + 2, + 1 + ], + [ + "UDPCPT", + 1, + 1 + ], + [ + "SWCPT", + 0, + 1 + ] + ] + }, + { + "name": "OUTER", + "offset": "0x64", + "fields": [ + [ + "DIDL2", + 23, + 1 + ], + [ + "CHP2", + 22, + 1 + ], + [ + "FAULT2", + 20, + 2 + ], + [ + "IDLES2", + 19, + 1 + ], + [ + "IDLEM2", + 18, + 1 + ], + [ + "POL2", + 17, + 1 + ], + [ + "BIAR", + 14, + 1 + ], + [ + "DLYPRT", + 10, + 3 + ], + [ + "DLYPRTEN", + 9, + 1 + ], + [ + "DTEN", + 8, + 1 + ], + [ + "DIDL1", + 7, + 1 + ], + [ + "CHP1", + 6, + 1 + ], + [ + "FAULT1", + 4, + 2 + ], + [ + "IDLES1", + 3, + 1 + ], + [ + "IDLEM1", + 2, + 1 + ], + [ + "POL1", + 1, + 1 + ] + ] + }, + { + "name": "FLTER", + "offset": "0x68", + "fields": [ + [ + "FLTLCK", + 31, + 1 + ], + [ + "FLT6EN", + 5, + 1 + ], + [ + "FLT5EN", + 4, + 1 + ], + [ + "FLT4EN", + 3, + 1 + ], + [ + "FLT3EN", + 2, + 1 + ], + [ + "FLT2EN", + 1, + 1 + ], + [ + "FLT1EN", + 0, + 1 + ] + ] + }, + { + "name": "TIMECR2", + "offset": "0x6C", + "fields": [ + [ + "TRGHLF", + 20, + 1 + ], + [ + "GTCMP3", + 17, + 1 + ], + [ + "GTCMP1", + 16, + 1 + ], + [ + "FEROM", + 14, + 2 + ], + [ + "BMROM", + 12, + 2 + ], + [ + "ADROM", + 10, + 2 + ], + [ + "OUTROM", + 8, + 2 + ], + [ + "ROM", + 6, + 2 + ], + [ + "UDM", + 4, + 1 + ], + [ + "DCDR", + 2, + 1 + ], + [ + "DCDS", + 1, + 1 + ], + [ + "DCDE", + 0, + 1 + ] + ] + }, + { + "name": "EEEFR3", + "offset": "0x70", + "fields": [ + [ + "EEVACNT", + 8, + 6 + ], + [ + "EEVASEL", + 4, + 4 + ], + [ + "EEVARSTM", + 2, + 1 + ], + [ + "EEVACRES", + 1, + 1 + ], + [ + "EEVACE", + 0, + 1 + ] + ] + } + ], + "interrupts": [ + "HRTIM_TIME_IRQn" + ] + }, + { + "name": "HRTIM_TIMF", + "base": "0x40016B00", + "interrupts": [ + "HRTIM_TIMF_IRQn" + ], + "registers": [ + { + "name": "TIMFCR", + "offset": "0x00", + "fields": [ + [ + "UPDGAT", + 28, + 4 + ], + [ + "PREEN", + 27, + 1 + ], + [ + "DACSYNC", + 25, + 2 + ], + [ + "MSTU", + 24, + 1 + ], + [ + "TDU", + 22, + 1 + ], + [ + "TCU", + 21, + 1 + ], + [ + "TBU", + 20, + 1 + ], + [ + "TAU", + 19, + 1 + ], + [ + "TxRSTU", + 18, + 1 + ], + [ + "TxREPU", + 17, + 1 + ], + [ + "DELCMP4", + 14, + 2 + ], + [ + "DELCMP2", + 12, + 2 + ], + [ + "SYNCSTRTx", + 11, + 1 + ], + [ + "SYNCRSTx", + 10, + 1 + ], + [ + "RSYNCU", + 9, + 1 + ], + [ + "INTLVD", + 7, + 2 + ], + [ + "PSHPLL", + 6, + 1 + ], + [ + "HALF", + 5, + 1 + ], + [ + "RETRIG", + 4, + 1 + ], + [ + "CONT", + 3, + 1 + ], + [ + "CK_PSCx", + 0, + 3 + ] + ] + }, + { + "name": "TIMFISR", + "offset": "0x04", + "fields": [ + [ + "O2CPY", + 21, + 1, + "r" + ], + [ + "O1CPY", + 20, + 1, + "r" + ], + [ + "O2STAT", + 19, + 1, + "r" + ], + [ + "O1STAT", + 18, + 1, + "r" + ], + [ + "IPPSTAT", + 17, + 1, + "r" + ], + [ + "CPPSTAT", + 16, + 1, + "r" + ], + [ + "DLYPRT", + 14, + 1, + "r" + ], + [ + "RST", + 13, + 1, + "r" + ], + [ + "RSTx2", + 12, + 1, + "r" + ], + [ + "SETx2", + 11, + 1, + "r" + ], + [ + "RSTx1", + 10, + 1, + "r" + ], + [ + "SETx1", + 9, + 1, + "r" + ], + [ + "CPT2", + 8, + 1, + "r" + ], + [ + "CPT1", + 7, + 1, + "r" + ], + [ + "UPD", + 6, + 1, + "r" + ], + [ + "REP", + 4, + 1, + "r" + ], + [ + "CMP4", + 3, + 1, + "r" + ], + [ + "CMP3", + 2, + 1, + "r" + ], + [ + "CMP2", + 1, + 1, + "r" + ], + [ + "CMP1", + 0, + 1, + "r" + ] + ] + }, + { + "name": "TIMFICR", + "offset": "0x08", + "fields": [ + [ + "DLYPRTC", + 14, + 1, + "w" + ], + [ + "RSTC", + 13, + 1, + "w" + ], + [ + "RSTx2C", + 12, + 1, + "w" + ], + [ + "SET2xC", + 11, + 1, + "w" + ], + [ + "RSTx1C", + 10, + 1, + "w" + ], + [ + "SET1xC", + 9, + 1, + "w" + ], + [ + "CPT2C", + 8, + 1, + "w" + ], + [ + "CPT1C", + 7, + 1, + "w" + ], + [ + "UPDC", + 6, + 1, + "w" + ], + [ + "REPC", + 4, + 1, + "w" + ], + [ + "CMP4C", + 3, + 1, + "w" + ], + [ + "CMP3C", + 2, + 1, + "w" + ], + [ + "CMP2C", + 1, + 1, + "w" + ], + [ + "CMP1C", + 0, + 1, + "w" + ] + ] + }, + { + "name": "TIMFDIER", + "offset": "0x0C", + "fields": [ + [ + "DLYPRTDE", + 30, + 1 + ], + [ + "RSTDE", + 29, + 1 + ], + [ + "RSTx2DE", + 28, + 1 + ], + [ + "SETx2DE", + 27, + 1 + ], + [ + "RSTx1DE", + 26, + 1 + ], + [ + "SET1xDE", + 25, + 1 + ], + [ + "CPT2DE", + 24, + 1 + ], + [ + "CPT1DE", + 23, + 1 + ], + [ + "UPDDE", + 22, + 1 + ], + [ + "REPDE", + 20, + 1 + ], + [ + "CMP4DE", + 19, + 1 + ], + [ + "CMP3DE", + 18, + 1 + ], + [ + "CMP2DE", + 17, + 1 + ], + [ + "CMP1DE", + 16, + 1 + ], + [ + "DLYPRTIE", + 14, + 1 + ], + [ + "RSTIE", + 13, + 1 + ], + [ + "RSTx2IE", + 12, + 1 + ], + [ + "SETx2IE", + 11, + 1 + ], + [ + "RSTx1IE", + 10, + 1 + ], + [ + "SET1xIE", + 9, + 1 + ], + [ + "CPT2IE", + 8, + 1 + ], + [ + "CPT1IE", + 7, + 1 + ], + [ + "UPDIE", + 6, + 1 + ], + [ + "REPIE", + 4, + 1 + ], + [ + "CMP4IE", + 3, + 1 + ], + [ + "CMP3IE", + 2, + 1 + ], + [ + "CMP2IE", + 1, + 1 + ], + [ + "CMP1IE", + 0, + 1 + ] + ] + }, + { + "name": "CNTFR", + "offset": "0x10", + "fields": [ + [ + "CNTx", + 0, + 16 + ] + ] + }, + { + "name": "PERFR", + "offset": "0x14", + "reset": "0x0000FFFF", + "fields": [ + [ + "PERx", + 0, + 16 + ] + ] + }, + { + "name": "REPFR", + "offset": "0x18", + "fields": [ + [ + "REPx", + 0, + 8 + ] + ] + }, + { + "name": "CMP1FR", + "offset": "0x1C", + "fields": [ + [ + "CMP1x", + 0, + 16 + ] + ] + }, + { + "name": "CMP1CFR", + "offset": "0x20", + "fields": [ + [ + "REPx", + 16, + 8 + ], + [ + "CMP1x", + 0, + 16 + ] + ] + }, + { + "name": "CMP2FR", + "offset": "0x24", + "fields": [ + [ + "CMP2x", + 0, + 16 + ] + ] + }, + { + "name": "CMP3FR", + "offset": "0x28", + "fields": [ + [ + "CMP3x", + 0, + 16 + ] + ] + }, + { + "name": "CMP4FR", + "offset": "0x2C", + "fields": [ + [ + "CMP4x", + 0, + 16 + ] + ] + }, + { + "name": "CPT1FR", + "offset": "0x30", + "fields": [ + [ + "CPT1x", + 0, + 16, + "r" + ], + [ + "DIR", + 16, + 1, + "r" + ] + ] + }, + { + "name": "CPT2FR", + "offset": "0x34", + "fields": [ + [ + "CPT2x", + 0, + 16, + "r" + ], + [ + "DIR", + 16, + 1, + "r" + ] + ] + }, + { + "name": "DTFR", + "offset": "0x38", + "fields": [ + [ + "DTFLKx", + 31, + 1 + ], + [ + "DTFSLKx", + 30, + 1 + ], + [ + "SDTFx", + 25, + 1 + ], + [ + "DTFx", + 16, + 9 + ], + [ + "DTRLKx", + 15, + 1 + ], + [ + "DTRSLKx", + 14, + 1 + ], + [ + "DTPRSC", + 10, + 3 + ], + [ + "SDTRx", + 9, + 1 + ], + [ + "DTRx", + 0, + 9 + ] + ] + }, + { + "name": "SETF1R", + "offset": "0x3C", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SST", + 0, + 1 + ] + ] + }, + { + "name": "RSTE1R", + "offset": "0x40", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SRT", + 0, + 1 + ] + ] + }, + { + "name": "SETF2R", + "offset": "0x44", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SST", + 0, + 1 + ] + ] + }, + { + "name": "RSTF2R", + "offset": "0x48", + "fields": [ + [ + "UPDATE", + 31, + 1 + ], + [ + "EXTEVNT10", + 30, + 1 + ], + [ + "EXTEVNT9", + 29, + 1 + ], + [ + "EXTEVNT8", + 28, + 1 + ], + [ + "EXTEVNT7", + 27, + 1 + ], + [ + "EXTEVNT6", + 26, + 1 + ], + [ + "EXTEVNT5", + 25, + 1 + ], + [ + "EXTEVNT4", + 24, + 1 + ], + [ + "EXTEVNT3", + 23, + 1 + ], + [ + "EXTEVNT2", + 22, + 1 + ], + [ + "EXTEVNT1", + 21, + 1 + ], + [ + "TIMEVNT9", + 20, + 1 + ], + [ + "TIMEVNT8", + 19, + 1 + ], + [ + "TIMEVNT7", + 18, + 1 + ], + [ + "TIMEVNT6", + 17, + 1 + ], + [ + "TIMEVNT5", + 16, + 1 + ], + [ + "TIMEVNT4", + 15, + 1 + ], + [ + "TIMEVNT3", + 14, + 1 + ], + [ + "TIMEVNT2", + 13, + 1 + ], + [ + "TIMEVNT1", + 12, + 1 + ], + [ + "MSTCMP4", + 11, + 1 + ], + [ + "MSTCMP3", + 10, + 1 + ], + [ + "MSTCMP2", + 9, + 1 + ], + [ + "MSTCMP1", + 8, + 1 + ], + [ + "MSTPER", + 7, + 1 + ], + [ + "CMP4", + 6, + 1 + ], + [ + "CMP3", + 5, + 1 + ], + [ + "CMP2", + 4, + 1 + ], + [ + "CMP1", + 3, + 1 + ], + [ + "PER", + 2, + 1 + ], + [ + "RESYNC", + 1, + 1 + ], + [ + "SRT", + 0, + 1 + ] + ] + }, + { + "name": "EEFFR1", + "offset": "0x4C", + "fields": [ + [ + "EE5FLTR", + 25, + 4 + ], + [ + "EE5LTCH", + 24, + 1 + ], + [ + "EE4FLTR", + 19, + 4 + ], + [ + "EE4LTCH", + 18, + 1 + ], + [ + "EE3FLTR", + 13, + 4 + ], + [ + "EE3LTCH", + 12, + 1 + ], + [ + "EE2FLTR", + 7, + 4 + ], + [ + "EE2LTCH", + 6, + 1 + ], + [ + "EE1FLTR", + 1, + 4 + ], + [ + "EE1LTCH", + 0, + 1 + ] + ] + }, + { + "name": "EEFFR2", + "offset": "0x50", + "fields": [ + [ + "EE10FLTR", + 25, + 4 + ], + [ + "EE10LTCH", + 24, + 1 + ], + [ + "EE9FLTR", + 19, + 4 + ], + [ + "EE9LTCH", + 18, + 1 + ], + [ + "EE8FLTR", + 13, + 4 + ], + [ + "EE8LTCH", + 12, + 1 + ], + [ + "EE7FLTR", + 7, + 4 + ], + [ + "EE7LTCH", + 6, + 1 + ], + [ + "EE6FLTR", + 1, + 4 + ], + [ + "EE6LTCH", + 0, + 1 + ] + ] + }, + { + "name": "RSTFR", + "offset": "0x54", + "fields": [ + [ + "TIMFCPM2", + 31, + 1 + ], + [ + "TIMDCMP4", + 30, + 1 + ], + [ + "TIMDCMP2", + 29, + 1 + ], + [ + "TIMDCMP1", + 28, + 1 + ], + [ + "TIMCCMP4", + 27, + 1 + ], + [ + "TIMCCMP2", + 26, + 1 + ], + [ + "TIMCCMP1", + 25, + 1 + ], + [ + "TIMBCMP4", + 24, + 1 + ], + [ + "TIMBCMP2", + 23, + 1 + ], + [ + "TIMBCMP1", + 22, + 1 + ], + [ + "TIMACMP4", + 21, + 1 + ], + [ + "TIMACMP2", + 20, + 1 + ], + [ + "TIMACMP1", + 19, + 1 + ], + [ + "EXTEVNT10", + 18, + 1 + ], + [ + "EXTEVNT9", + 17, + 1 + ], + [ + "EXTEVNT8", + 16, + 1 + ], + [ + "EXTEVNT7", + 15, + 1 + ], + [ + "EXTEVNT6", + 14, + 1 + ], + [ + "EXTEVNT5", + 13, + 1 + ], + [ + "EXTEVNT4", + 12, + 1 + ], + [ + "EXTEVNT3", + 11, + 1 + ], + [ + "EXTEVNT2", + 10, + 1 + ], + [ + "EXTEVNT1", + 9, + 1 + ], + [ + "MSTCMP4", + 8, + 1 + ], + [ + "MSTCMP3", + 7, + 1 + ], + [ + "MSTCMP2", + 6, + 1 + ], + [ + "MSTCMP1", + 5, + 1 + ], + [ + "MSTPER", + 4, + 1 + ], + [ + "CMP4", + 3, + 1 + ], + [ + "CMP2", + 2, + 1 + ], + [ + "UPDT", + 1, + 1 + ], + [ + "TIMFCMP1", + 0, + 1 + ] + ] + }, + { + "name": "CHPFR", + "offset": "0x58", + "fields": [ + [ + "STRTPW", + 7, + 4 + ], + [ + "CHPDTY", + 4, + 3 + ], + [ + "CHPFRQ", + 0, + 4 + ] + ] + }, + { + "name": "CPT1FCR", + "offset": "0x5C", + "fields": [ + [ + "TECMP2", + 31, + 1 + ], + [ + "TECMP1", + 30, + 1 + ], + [ + "TE1RST", + 29, + 1 + ], + [ + "TE1SET", + 28, + 1 + ], + [ + "TDCMP2", + 27, + 1 + ], + [ + "TDCMP1", + 26, + 1 + ], + [ + "TD1RST", + 25, + 1 + ], + [ + "TD1SET", + 24, + 1 + ], + [ + "TCCMP2", + 23, + 1 + ], + [ + "TCCMP1", + 22, + 1 + ], + [ + "TC1RST", + 21, + 1 + ], + [ + "TC1SET", + 20, + 1 + ], + [ + "TBCMP2", + 19, + 1 + ], + [ + "TBCMP1", + 18, + 1 + ], + [ + "TB1RST", + 17, + 1 + ], + [ + "TB1SET", + 16, + 1 + ], + [ + "TACMP2", + 15, + 1 + ], + [ + "TACMP1", + 14, + 1 + ], + [ + "TA1RST", + 13, + 1 + ], + [ + "TA1SET", + 12, + 1 + ], + [ + "EXEV10CPT", + 11, + 1 + ], + [ + "EXEV9CPT", + 10, + 1 + ], + [ + "EXEV8CPT", + 9, + 1 + ], + [ + "EXEV7CPT", + 8, + 1 + ], + [ + "EXEV6CPT", + 7, + 1 + ], + [ + "EXEV5CPT", + 6, + 1 + ], + [ + "EXEV4CPT", + 5, + 1 + ], + [ + "EXEV3CPT", + 4, + 1 + ], + [ + "EXEV2CPT", + 3, + 1 + ], + [ + "EXEV1CPT", + 2, + 1 + ], + [ + "UDPCPT", + 1, + 1 + ], + [ + "SWCPT", + 0, + 1 + ] + ] + }, + { + "name": "CPT2FCR", + "offset": "0x60", + "fields": [ + [ + "TECMP2", + 31, + 1 + ], + [ + "TECMP1", + 30, + 1 + ], + [ + "TE1RST", + 29, + 1 + ], + [ + "TE1SET", + 28, + 1 + ], + [ + "TDCMP2", + 27, + 1 + ], + [ + "TDCMP1", + 26, + 1 + ], + [ + "TD1RST", + 25, + 1 + ], + [ + "TD1SET", + 24, + 1 + ], + [ + "TCCMP2", + 23, + 1 + ], + [ + "TCCMP1", + 22, + 1 + ], + [ + "TC1RST", + 21, + 1 + ], + [ + "TC1SET", + 20, + 1 + ], + [ + "TBCMP2", + 19, + 1 + ], + [ + "TBCMP1", + 18, + 1 + ], + [ + "TB1RST", + 17, + 1 + ], + [ + "TB1SET", + 16, + 1 + ], + [ + "TACMP2", + 15, + 1 + ], + [ + "TACMP1", + 14, + 1 + ], + [ + "TA1RST", + 13, + 1 + ], + [ + "TA1SET", + 12, + 1 + ], + [ + "EXEV10CPT", + 11, + 1 + ], + [ + "EXEV9CPT", + 10, + 1 + ], + [ + "EXEV8CPT", + 9, + 1 + ], + [ + "EXEV7CPT", + 8, + 1 + ], + [ + "EXEV6CPT", + 7, + 1 + ], + [ + "EXEV5CPT", + 6, + 1 + ], + [ + "EXEV4CPT", + 5, + 1 + ], + [ + "EXEV3CPT", + 4, + 1 + ], + [ + "EXEV2CPT", + 3, + 1 + ], + [ + "EXEV1CPT", + 2, + 1 + ], + [ + "UDPCPT", + 1, + 1 + ], + [ + "SWCPT", + 0, + 1 + ] + ] + }, + { + "name": "OUTFR", + "offset": "0x64", + "fields": [ + [ + "DIDL2", + 23, + 1 + ], + [ + "CHP2", + 22, + 1 + ], + [ + "FAULT2", + 20, + 2 + ], + [ + "IDLES2", + 19, + 1 + ], + [ + "IDLEM2", + 18, + 1 + ], + [ + "POL2", + 17, + 1 + ], + [ + "BIAR", + 14, + 1 + ], + [ + "DLYPRT", + 10, + 3 + ], + [ + "DLYPRTEN", + 9, + 1 + ], + [ + "DTEN", + 8, + 1 + ], + [ + "DIDL1", + 7, + 1 + ], + [ + "CHP1", + 6, + 1 + ], + [ + "FAULT1", + 4, + 2 + ], + [ + "IDLES1", + 3, + 1 + ], + [ + "IDLEM1", + 2, + 1 + ], + [ + "POL1", + 1, + 1 + ] + ] + }, + { + "name": "FLTFR", + "offset": "0x68", + "fields": [ + [ + "FLTLCK", + 31, + 1 + ], + [ + "FLT6EN", + 5, + 1 + ], + [ + "FLT5EN", + 4, + 1 + ], + [ + "FLT4EN", + 3, + 1 + ], + [ + "FLT3EN", + 2, + 1 + ], + [ + "FLT2EN", + 1, + 1 + ], + [ + "FLT1EN", + 0, + 1 + ] + ] + }, + { + "name": "TIMFCR2", + "offset": "0x6C", + "fields": [ + [ + "TRGHLF", + 20, + 1 + ], + [ + "GTCMP3", + 17, + 1 + ], + [ + "GTCMP1", + 16, + 1 + ], + [ + "FEROM", + 14, + 2 + ], + [ + "BMROM", + 12, + 2 + ], + [ + "ADROM", + 10, + 2 + ], + [ + "OUTROM", + 8, + 2 + ], + [ + "ROM", + 6, + 2 + ], + [ + "UDM", + 4, + 1 + ], + [ + "DCDR", + 2, + 1 + ], + [ + "DCDS", + 1, + 1 + ], + [ + "DCDE", + 0, + 1 + ] + ] + }, + { + "name": "FEEFR3", + "offset": "0x70", + "fields": [ + [ + "EEVACNT", + 8, + 6 + ], + [ + "EEVASEL", + 4, + 4 + ], + [ + "EEVARSTM", + 2, + 1 + ], + [ + "EEVACRES", + 1, + 1 + ], + [ + "EEVACE", + 0, + 1 + ] + ] + } + ] + }, + { + "name": "HRTIM_Common", + "base": "0x40016B80", + "interrupts": [ + "HRTIM_TIM_FLT_IRQn" + ], + "registers": [ + { + "name": "CR1", + "offset": "0x00", + "fields": [ + [ + "AD4USRC", + 25, + 3 + ], + [ + "AD3USRC", + 22, + 3 + ], + [ + "AD2USRC", + 19, + 3 + ], + [ + "AD1USRC", + 16, + 3 + ], + [ + "TFUDIS", + 6, + 1 + ], + [ + "TEUDIS", + 5, + 1 + ], + [ + "TDUDIS", + 4, + 1 + ], + [ + "TCUDIS", + 3, + 1 + ], + [ + "TBUDIS", + 2, + 1 + ], + [ + "TAUDIS", + 1, + 1 + ], + [ + "MUDIS", + 0, + 1 + ] + ] + }, + { + "name": "CR2", + "offset": "0x04", + "fields": [ + [ + "SWPF", + 21, + 1 + ], + [ + "SWPE", + 20, + 1 + ], + [ + "SWPD", + 19, + 1 + ], + [ + "SWPC", + 18, + 1 + ], + [ + "SWPB", + 17, + 1 + ], + [ + "SWPA", + 16, + 1 + ], + [ + "TFRST", + 14, + 1 + ], + [ + "TERST", + 13, + 1 + ], + [ + "TDRST", + 12, + 1 + ], + [ + "TCRST", + 11, + 1 + ], + [ + "TBRST", + 10, + 1 + ], + [ + "TARST", + 9, + 1 + ], + [ + "MRST", + 8, + 1 + ], + [ + "TFSWU", + 6, + 1 + ], + [ + "TESWU", + 5, + 1 + ], + [ + "TDSWU", + 4, + 1 + ], + [ + "TCSWU", + 3, + 1 + ], + [ + "TBSWU", + 2, + 1 + ], + [ + "TASWU", + 1, + 1 + ], + [ + "MSWU", + 0, + 1 + ] + ] + }, + { + "name": "ISR", + "offset": "0x08", + "fields": [ + [ + "BMPER", + 17, + 1, + "r" + ], + [ + "DLLRDY", + 16, + 1, + "r" + ], + [ + "FLT6", + 6, + 1, + "r" + ], + [ + "SYSFLT", + 5, + 1, + "r" + ], + [ + "FLT5", + 4, + 1, + "r" + ], + [ + "FLT4", + 3, + 1, + "r" + ], + [ + "FLT3", + 2, + 1, + "r" + ], + [ + "FLT2", + 1, + 1, + "r" + ], + [ + "FLT1", + 0, + 1, + "r" + ] + ] + }, + { + "name": "ICR", + "offset": "0x0C", + "fields": [ + [ + "BMPERC", + 17, + 1, + "w" + ], + [ + "DLLRDYC", + 16, + 1, + "w" + ], + [ + "FLT6C", + 6, + 1, + "w" + ], + [ + "SYSFLTC", + 5, + 1, + "w" + ], + [ + "FLT5C", + 4, + 1, + "w" + ], + [ + "FLT4C", + 3, + 1, + "w" + ], + [ + "FLT3C", + 2, + 1, + "w" + ], + [ + "FLT2C", + 1, + 1, + "w" + ], + [ + "FLT1C", + 0, + 1, + "w" + ] + ] + }, + { + "name": "IER", + "offset": "0x10", + "fields": [ + [ + "BMPERIE", + 17, + 1 + ], + [ + "DLLRDYIE", + 16, + 1 + ], + [ + "FLT6IE", + 6, + 1 + ], + [ + "SYSFLTE", + 5, + 1 + ], + [ + "FLT5IE", + 4, + 1 + ], + [ + "FLT4IE", + 3, + 1 + ], + [ + "FLT3IE", + 2, + 1 + ], + [ + "FLT2IE", + 1, + 1 + ], + [ + "FLT1IE", + 0, + 1 + ] + ] + }, + { + "name": "OENR", + "offset": "0x14", + "fields": [ + [ + "TF2OEN", + 11, + 1 + ], + [ + "TF1OEN", + 10, + 1 + ], + [ + "TE2OEN", + 9, + 1 + ], + [ + "TE1OEN", + 8, + 1 + ], + [ + "TD2OEN", + 7, + 1 + ], + [ + "TD1OEN", + 6, + 1 + ], + [ + "TC2OEN", + 5, + 1 + ], + [ + "TC1OEN", + 4, + 1 + ], + [ + "TB2OEN", + 3, + 1 + ], + [ + "TB1OEN", + 2, + 1 + ], + [ + "TA2OEN", + 1, + 1 + ], + [ + "TA1OEN", + 0, + 1 + ] + ] + }, + { + "name": "ODISR", + "offset": "0x18", + "fields": [ + [ + "TF2ODIS", + 11, + 1, + "w" + ], + [ + "TF1ODIS", + 10, + 1, + "w" + ], + [ + "TE2ODIS", + 9, + 1, + "w" + ], + [ + "TE1ODIS", + 8, + 1, + "w" + ], + [ + "TD2ODIS", + 7, + 1, + "w" + ], + [ + "TD1ODIS", + 6, + 1, + "w" + ], + [ + "TC2ODIS", + 5, + 1, + "w" + ], + [ + "TC1ODIS", + 4, + 1, + "w" + ], + [ + "TB2ODIS", + 3, + 1, + "w" + ], + [ + "TB1ODIS", + 2, + 1, + "w" + ], + [ + "TA2ODIS", + 1, + 1, + "w" + ], + [ + "TA1ODIS", + 0, + 1, + "w" + ] + ] + }, + { + "name": "ODSR", + "offset": "0x1C", + "fields": [ + [ + "TF2ODS", + 11, + 1, + "r" + ], + [ + "TF1ODS", + 10, + 1, + "r" + ], + [ + "TE2ODS", + 9, + 1, + "r" + ], + [ + "TE1ODS", + 8, + 1, + "r" + ], + [ + "TD2ODS", + 7, + 1, + "r" + ], + [ + "TD1ODS", + 6, + 1, + "r" + ], + [ + "TC2ODS", + 5, + 1, + "r" + ], + [ + "TC1ODS", + 4, + 1, + "r" + ], + [ + "TB2ODS", + 3, + 1, + "r" + ], + [ + "TB1ODS", + 2, + 1, + "r" + ], + [ + "TA2ODS", + 1, + 1, + "r" + ], + [ + "TA1ODS", + 0, + 1, + "r" + ] + ] + }, + { + "name": "BMCR", + "offset": "0x20", + "fields": [ + [ + "BMSTAT", + 31, + 1 + ], + [ + "TFBM", + 22, + 1 + ], + [ + "TEBM", + 21, + 1 + ], + [ + "TDBM", + 20, + 1 + ], + [ + "TCBM", + 19, + 1 + ], + [ + "TBBM", + 18, + 1 + ], + [ + "TABM", + 17, + 1 + ], + [ + "MTBM", + 16, + 1 + ], + [ + "BMPREN", + 10, + 1 + ], + [ + "BMPRSC", + 6, + 4 + ], + [ + "BMCLK", + 2, + 4 + ], + [ + "BMOM", + 1, + 1 + ], + [ + "BME", + 0, + 1 + ] + ] + }, + { + "name": "BMTRG", + "offset": "0x24", + "fields": [ + [ + "OCHPEV", + 31, + 1 + ], + [ + "EEV8", + 30, + 1 + ], + [ + "EEV7", + 29, + 1 + ], + [ + "TDEEV8", + 28, + 1 + ], + [ + "TDEEV7", + 27, + 1 + ], + [ + "TECMP2", + 26, + 1 + ], + [ + "TECMP1", + 25, + 1 + ], + [ + "TEREP", + 24, + 1 + ], + [ + "TERST", + 23, + 1 + ], + [ + "TDCMP2", + 22, + 1 + ], + [ + "TDCMP1", + 21, + 1 + ], + [ + "TDREP", + 20, + 1 + ], + [ + "TDRST", + 19, + 1 + ], + [ + "TCCMP2", + 18, + 1 + ], + [ + "TCCMP1", + 17, + 1 + ], + [ + "TCREP", + 16, + 1 + ], + [ + "TCRST", + 15, + 1 + ], + [ + "TBCMP2", + 14, + 1 + ], + [ + "TBCMP1", + 13, + 1 + ], + [ + "TBREP", + 12, + 1 + ], + [ + "TBRST", + 11, + 1 + ], + [ + "TACMP2", + 10, + 1 + ], + [ + "TACMP1", + 9, + 1 + ], + [ + "TAREP", + 8, + 1 + ], + [ + "TARST", + 7, + 1 + ], + [ + "MSTCMP4", + 6, + 1 + ], + [ + "MSTCMP3", + 5, + 1 + ], + [ + "MSTCMP2", + 4, + 1 + ], + [ + "MSTCMP1", + 3, + 1 + ], + [ + "MSTREP", + 2, + 1 + ], + [ + "MSTRST", + 1, + 1 + ], + [ + "SW", + 0, + 1 + ] + ] + }, + { + "name": "BMCMPR", + "offset": "0x28", + "fields": [ + [ + "BMCMP", + 0, + 16 + ] + ] + }, + { + "name": "BMPER", + "offset": "0x2C", + "fields": [ + [ + "BMPER", + 0, + 16 + ] + ] + }, + { + "name": "EECR1", + "offset": "0x30", + "fields": [ + [ + "EE5FAST", + 29, + 1 + ], + [ + "EE5SNS", + 27, + 2 + ], + [ + "EE5POL", + 26, + 1 + ], + [ + "EE5SRC", + 24, + 2 + ], + [ + "EE4FAST", + 23, + 1 + ], + [ + "EE4SNS", + 21, + 2 + ], + [ + "EE4POL", + 20, + 1 + ], + [ + "EE4SRC", + 18, + 2 + ], + [ + "EE3FAST", + 17, + 1 + ], + [ + "EE3SNS", + 15, + 2 + ], + [ + "EE3POL", + 14, + 1 + ], + [ + "EE3SRC", + 12, + 2 + ], + [ + "EE2FAST", + 11, + 1 + ], + [ + "EE2SNS", + 9, + 2 + ], + [ + "EE2POL", + 8, + 1 + ], + [ + "EE2SRC", + 6, + 2 + ], + [ + "EE1FAST", + 5, + 1 + ], + [ + "EE1SNS", + 3, + 2 + ], + [ + "EE1POL", + 2, + 1 + ], + [ + "EE1SRC", + 0, + 2 + ] + ] + }, + { + "name": "EECR2", + "offset": "0x34", + "fields": [ + [ + "EE6SRC", + 0, + 2 + ], + [ + "EE6POL", + 2, + 1 + ], + [ + "EE6SNS", + 3, + 2 + ], + [ + "EE7SRC", + 6, + 2 + ], + [ + "EE7POL", + 8, + 1 + ], + [ + "EE7SNS", + 9, + 2 + ], + [ + "EE8SRC", + 12, + 2 + ], + [ + "EE8POL", + 14, + 1 + ], + [ + "EE8SNS", + 15, + 2 + ], + [ + "EE9SRC", + 18, + 2 + ], + [ + "EE9POL", + 20, + 1 + ], + [ + "EE9SNS", + 21, + 2 + ], + [ + "EE10SRC", + 24, + 2 + ], + [ + "EE10POL", + 26, + 1 + ], + [ + "EE10SNS", + 27, + 2 + ] + ] + }, + { + "name": "EECR3", + "offset": "0x38", + "fields": [ + [ + "EE6F", + 0, + 4 + ], + [ + "EE7F", + 6, + 4 + ], + [ + "EE8F", + 12, + 4 + ], + [ + "EE9F", + 18, + 4 + ], + [ + "EE10F", + 24, + 4 + ], + [ + "EEVSD", + 30, + 2 + ] + ] + }, + { + "name": "ADC1R", + "offset": "0x3C", + "fields": [ + [ + "AD1TEPER", + 31, + 1 + ], + [ + "AD1TEC4", + 30, + 1 + ], + [ + "AD1TEC3", + 29, + 1 + ], + [ + "AD1TEC2", + 28, + 1 + ], + [ + "AD1TDPER", + 27, + 1 + ], + [ + "AD1TDC4", + 26, + 1 + ], + [ + "AD1TDC3", + 25, + 1 + ], + [ + "AD1TDC2", + 24, + 1 + ], + [ + "AD1TCPER", + 23, + 1 + ], + [ + "AD1TCC4", + 22, + 1 + ], + [ + "AD1TCC3", + 21, + 1 + ], + [ + "AD1TCC2", + 20, + 1 + ], + [ + "AD1TBRST", + 19, + 1 + ], + [ + "AD1TBPER", + 18, + 1 + ], + [ + "AD1TBC4", + 17, + 1 + ], + [ + "AD1TBC3", + 16, + 1 + ], + [ + "AD1TBC2", + 15, + 1 + ], + [ + "AD1TARST", + 14, + 1 + ], + [ + "AD1TAPER", + 13, + 1 + ], + [ + "AD1TAC4", + 12, + 1 + ], + [ + "AD1TAC3", + 11, + 1 + ], + [ + "AD1TAC2", + 10, + 1 + ], + [ + "AD1EEV5", + 9, + 1 + ], + [ + "AD1EEV4", + 8, + 1 + ], + [ + "AD1EEV3", + 7, + 1 + ], + [ + "AD1EEV2", + 6, + 1 + ], + [ + "AD1EEV1", + 5, + 1 + ], + [ + "AD1MPER", + 4, + 1 + ], + [ + "AD1MC4", + 3, + 1 + ], + [ + "AD1MC3", + 2, + 1 + ], + [ + "AD1MC2", + 1, + 1 + ], + [ + "AD1MC1", + 0, + 1 + ] + ] + }, + { + "name": "ADC2R", + "offset": "0x40", + "fields": [ + [ + "AD2TERST", + 31, + 1 + ], + [ + "AD2TEC4", + 30, + 1 + ], + [ + "AD2TEC3", + 29, + 1 + ], + [ + "AD2TEC2", + 28, + 1 + ], + [ + "AD2TDRST", + 27, + 1 + ], + [ + "AD2TDPER", + 26, + 1 + ], + [ + "AD2TDC4", + 25, + 1 + ], + [ + "AD2TDC3", + 24, + 1 + ], + [ + "AD2TDC2", + 23, + 1 + ], + [ + "AD2TCRST", + 22, + 1 + ], + [ + "AD2TCPER", + 21, + 1 + ], + [ + "AD2TCC4", + 20, + 1 + ], + [ + "AD2TCC3", + 19, + 1 + ], + [ + "AD2TCC2", + 18, + 1 + ], + [ + "AD2TBPER", + 17, + 1 + ], + [ + "AD2TBC4", + 16, + 1 + ], + [ + "AD2TBC3", + 15, + 1 + ], + [ + "AD2TBC2", + 14, + 1 + ], + [ + "AD2TAPER", + 13, + 1 + ], + [ + "AD2TAC4", + 12, + 1 + ], + [ + "AD2TAC3", + 11, + 1 + ], + [ + "AD2TAC2", + 10, + 1 + ], + [ + "AD2EEV10", + 9, + 1 + ], + [ + "AD2EEV9", + 8, + 1 + ], + [ + "AD2EEV8", + 7, + 1 + ], + [ + "AD2EEV7", + 6, + 1 + ], + [ + "AD2EEV6", + 5, + 1 + ], + [ + "AD2MPER", + 4, + 1 + ], + [ + "AD2MC4", + 3, + 1 + ], + [ + "AD2MC3", + 2, + 1 + ], + [ + "AD2MC2", + 1, + 1 + ], + [ + "AD2MC1", + 0, + 1 + ] + ] + }, + { + "name": "ADC3R", + "offset": "0x44", + "fields": [ + [ + "AD1TEPER", + 31, + 1 + ], + [ + "AD1TEC4", + 30, + 1 + ], + [ + "AD1TEC3", + 29, + 1 + ], + [ + "AD1TEC2", + 28, + 1 + ], + [ + "AD1TDPER", + 27, + 1 + ], + [ + "AD1TDC4", + 26, + 1 + ], + [ + "AD1TDC3", + 25, + 1 + ], + [ + "AD1TDC2", + 24, + 1 + ], + [ + "AD1TCPER", + 23, + 1 + ], + [ + "AD1TCC4", + 22, + 1 + ], + [ + "AD1TCC3", + 21, + 1 + ], + [ + "AD1TCC2", + 20, + 1 + ], + [ + "AD1TBRST", + 19, + 1 + ], + [ + "AD1TBPER", + 18, + 1 + ], + [ + "AD1TBC4", + 17, + 1 + ], + [ + "AD1TBC3", + 16, + 1 + ], + [ + "AD1TBC2", + 15, + 1 + ], + [ + "AD1TARST", + 14, + 1 + ], + [ + "AD1TAPER", + 13, + 1 + ], + [ + "AD1TAC4", + 12, + 1 + ], + [ + "AD1TAC3", + 11, + 1 + ], + [ + "AD1TAC2", + 10, + 1 + ], + [ + "AD1EEV5", + 9, + 1 + ], + [ + "AD1EEV4", + 8, + 1 + ], + [ + "AD1EEV3", + 7, + 1 + ], + [ + "AD1EEV2", + 6, + 1 + ], + [ + "AD1EEV1", + 5, + 1 + ], + [ + "AD1MPER", + 4, + 1 + ], + [ + "AD1MC4", + 3, + 1 + ], + [ + "AD1MC3", + 2, + 1 + ], + [ + "AD1MC2", + 1, + 1 + ], + [ + "AD1MC1", + 0, + 1 + ] + ] + }, + { + "name": "ADC4R", + "offset": "0x48", + "fields": [ + [ + "AD2TERST", + 31, + 1 + ], + [ + "AD2TEC4", + 30, + 1 + ], + [ + "AD2TEC3", + 29, + 1 + ], + [ + "AD2TEC2", + 28, + 1 + ], + [ + "AD2TDRST", + 27, + 1 + ], + [ + "AD2TDPER", + 26, + 1 + ], + [ + "AD2TDC4", + 25, + 1 + ], + [ + "AD2TDC3", + 24, + 1 + ], + [ + "AD2TDC2", + 23, + 1 + ], + [ + "AD2TCRST", + 22, + 1 + ], + [ + "AD2TCPER", + 21, + 1 + ], + [ + "AD2TCC4", + 20, + 1 + ], + [ + "AD2TCC3", + 19, + 1 + ], + [ + "AD2TCC2", + 18, + 1 + ], + [ + "AD2TBPER", + 17, + 1 + ], + [ + "AD2TBC4", + 16, + 1 + ], + [ + "AD2TBC3", + 15, + 1 + ], + [ + "AD2TBC2", + 14, + 1 + ], + [ + "AD2TAPER", + 13, + 1 + ], + [ + "AD2TAC4", + 12, + 1 + ], + [ + "AD2TAC3", + 11, + 1 + ], + [ + "AD2TAC2", + 10, + 1 + ], + [ + "AD2EEV10", + 9, + 1 + ], + [ + "AD2EEV9", + 8, + 1 + ], + [ + "AD2EEV8", + 7, + 1 + ], + [ + "AD2EEV7", + 6, + 1 + ], + [ + "AD2EEV6", + 5, + 1 + ], + [ + "AD2MPER", + 4, + 1 + ], + [ + "AD2MC4", + 3, + 1 + ], + [ + "AD2MC3", + 2, + 1 + ], + [ + "AD2MC2", + 1, + 1 + ], + [ + "AD2MC1", + 0, + 1 + ] + ] + }, + { + "name": "DLLCR", + "offset": "0x4C", + "fields": [ + [ + "CALRTE", + 2, + 2 + ], + [ + "CALEN", + 1, + 1 + ], + [ + "CAL", + 0, + 1 + ] + ] + }, + { + "name": "FLTINR1", + "offset": "0x50", + "fields": [ + [ + "FLT4LCK", + 31, + 1 + ], + [ + "FLT4F", + 27, + 4 + ], + [ + "FLT4SRC", + 26, + 1 + ], + [ + "FLT4P", + 25, + 1 + ], + [ + "FLT4E", + 24, + 1 + ], + [ + "FLT3LCK", + 23, + 1 + ], + [ + "FLT3F", + 19, + 4 + ], + [ + "FLT3SRC", + 18, + 1 + ], + [ + "FLT3P", + 17, + 1 + ], + [ + "FLT3E", + 16, + 1 + ], + [ + "FLT2LCK", + 15, + 1 + ], + [ + "FLT2F", + 11, + 4 + ], + [ + "FLT2SRC", + 10, + 1 + ], + [ + "FLT2P", + 9, + 1 + ], + [ + "FLT2E", + 8, + 1 + ], + [ + "FLT1LCK", + 7, + 1 + ], + [ + "FLT1F", + 3, + 4 + ], + [ + "FLT1SRC", + 2, + 1 + ], + [ + "FLT1P", + 1, + 1 + ], + [ + "FLT1E", + 0, + 1 + ] + ] + }, + { + "name": "FLTINR2", + "offset": "0x54", + "fields": [ + [ + "FLTSD", + 24, + 2 + ], + [ + "FLT6SRC_1", + 21, + 1 + ], + [ + "FLT5SRC_1", + 20, + 1 + ], + [ + "FLT4SRC_1", + 19, + 1 + ], + [ + "FLT3SRC_1", + 18, + 1 + ], + [ + "FLT2SRC_1", + 17, + 1 + ], + [ + "FLT1SRC_1", + 16, + 1 + ], + [ + "FLT6LCK", + 15, + 1 + ], + [ + "FLT6F", + 11, + 4 + ], + [ + "FLT6SRC_0", + 10, + 1 + ], + [ + "FLT6P", + 9, + 1 + ], + [ + "FLT6E", + 8, + 1 + ], + [ + "FLT5LCK", + 7, + 1 + ], + [ + "FLT5F", + 3, + 4 + ], + [ + "FLT5SRC", + 2, + 1 + ], + [ + "FLT5P", + 1, + 1 + ], + [ + "FLT5E", + 0, + 1 + ] + ] + }, + { + "name": "BDMUPDR", + "offset": "0x58", + "fields": [ + [ + "MCMP4", + 9, + 1 + ], + [ + "MCMP3", + 8, + 1 + ], + [ + "MCMP2", + 7, + 1 + ], + [ + "MCMP1", + 6, + 1 + ], + [ + "MREP", + 5, + 1 + ], + [ + "MPER", + 4, + 1 + ], + [ + "MCNT", + 3, + 1 + ], + [ + "MDIER", + 2, + 1 + ], + [ + "MICR", + 1, + 1 + ], + [ + "MCR", + 0, + 1 + ] + ] + }, + { + "name": "BDTAUPR", + "offset": "0x5C", + "fields": [ + [ + "TIMxEEFR3", + 22, + 1 + ], + [ + "TIMxCR2", + 21, + 1 + ], + [ + "TIMxFLTR", + 20, + 1 + ], + [ + "TIMxOUTR", + 19, + 1 + ], + [ + "TIMxCHPR", + 18, + 1 + ], + [ + "TIMxRSTR", + 17, + 1 + ], + [ + "TIMxEEFR2", + 16, + 1 + ], + [ + "TIMxEEFR1", + 15, + 1 + ], + [ + "TIMxRST2R", + 14, + 1 + ], + [ + "TIMxSET2R", + 13, + 1 + ], + [ + "TIMxRST1R", + 12, + 1 + ], + [ + "TIMxSET1R", + 11, + 1 + ], + [ + "TIMx_DTxR", + 10, + 1 + ], + [ + "TIMxCMP4", + 9, + 1 + ], + [ + "TIMxCMP3", + 8, + 1 + ], + [ + "TIMxCMP2", + 7, + 1 + ], + [ + "TIMxCMP1", + 6, + 1 + ], + [ + "TIMxREP", + 5, + 1 + ], + [ + "TIMxPER", + 4, + 1 + ], + [ + "TIMxCNT", + 3, + 1 + ], + [ + "TIMxDIER", + 2, + 1 + ], + [ + "TIMxICR", + 1, + 1 + ], + [ + "TIMxCR", + 0, + 1 + ] + ] + }, + { + "name": "BDTBUPR", + "offset": "0x60", + "fields": [ + [ + "TIMxEEFR3", + 22, + 1 + ], + [ + "TIMxCR2", + 21, + 1 + ], + [ + "TIMxFLTR", + 20, + 1 + ], + [ + "TIMxOUTR", + 19, + 1 + ], + [ + "TIMxCHPR", + 18, + 1 + ], + [ + "TIMxRSTR", + 17, + 1 + ], + [ + "TIMxEEFR2", + 16, + 1 + ], + [ + "TIMxEEFR1", + 15, + 1 + ], + [ + "TIMxRST2R", + 14, + 1 + ], + [ + "TIMxSET2R", + 13, + 1 + ], + [ + "TIMxRST1R", + 12, + 1 + ], + [ + "TIMxSET1R", + 11, + 1 + ], + [ + "TIMx_DTxR", + 10, + 1 + ], + [ + "TIMxCMP4", + 9, + 1 + ], + [ + "TIMxCMP3", + 8, + 1 + ], + [ + "TIMxCMP2", + 7, + 1 + ], + [ + "TIMxCMP1", + 6, + 1 + ], + [ + "TIMxREP", + 5, + 1 + ], + [ + "TIMxPER", + 4, + 1 + ], + [ + "TIMxCNT", + 3, + 1 + ], + [ + "TIMxDIER", + 2, + 1 + ], + [ + "TIMxICR", + 1, + 1 + ], + [ + "TIMxCR", + 0, + 1 + ] + ] + }, + { + "name": "BDTCUPR", + "offset": "0x64", + "fields": [ + [ + "TIMxEEFR3", + 22, + 1 + ], + [ + "TIMxCR2", + 21, + 1 + ], + [ + "TIMxFLTR", + 20, + 1 + ], + [ + "TIMxOUTR", + 19, + 1 + ], + [ + "TIMxCHPR", + 18, + 1 + ], + [ + "TIMxRSTR", + 17, + 1 + ], + [ + "TIMxEEFR2", + 16, + 1 + ], + [ + "TIMxEEFR1", + 15, + 1 + ], + [ + "TIMxRST2R", + 14, + 1 + ], + [ + "TIMxSET2R", + 13, + 1 + ], + [ + "TIMxRST1R", + 12, + 1 + ], + [ + "TIMxSET1R", + 11, + 1 + ], + [ + "TIMx_DTxR", + 10, + 1 + ], + [ + "TIMxCMP4", + 9, + 1 + ], + [ + "TIMxCMP3", + 8, + 1 + ], + [ + "TIMxCMP2", + 7, + 1 + ], + [ + "TIMxCMP1", + 6, + 1 + ], + [ + "TIMxREP", + 5, + 1 + ], + [ + "TIMxPER", + 4, + 1 + ], + [ + "TIMxCNT", + 3, + 1 + ], + [ + "TIMxDIER", + 2, + 1 + ], + [ + "TIMxICR", + 1, + 1 + ], + [ + "TIMxCR", + 0, + 1 + ] + ] + }, + { + "name": "BDTDUPR", + "offset": "0x68", + "fields": [ + [ + "TIMxEEFR3", + 22, + 1 + ], + [ + "TIMxCR2", + 21, + 1 + ], + [ + "TIMxFLTR", + 20, + 1 + ], + [ + "TIMxOUTR", + 19, + 1 + ], + [ + "TIMxCHPR", + 18, + 1 + ], + [ + "TIMxRSTR", + 17, + 1 + ], + [ + "TIMxEEFR2", + 16, + 1 + ], + [ + "TIMxEEFR1", + 15, + 1 + ], + [ + "TIMxRST2R", + 14, + 1 + ], + [ + "TIMxSET2R", + 13, + 1 + ], + [ + "TIMxRST1R", + 12, + 1 + ], + [ + "TIMxSET1R", + 11, + 1 + ], + [ + "TIMx_DTxR", + 10, + 1 + ], + [ + "TIMxCMP4", + 9, + 1 + ], + [ + "TIMxCMP3", + 8, + 1 + ], + [ + "TIMxCMP2", + 7, + 1 + ], + [ + "TIMxCMP1", + 6, + 1 + ], + [ + "TIMxREP", + 5, + 1 + ], + [ + "TIMxPER", + 4, + 1 + ], + [ + "TIMxCNT", + 3, + 1 + ], + [ + "TIMxDIER", + 2, + 1 + ], + [ + "TIMxICR", + 1, + 1 + ], + [ + "TIMxCR", + 0, + 1 + ] + ] + }, + { + "name": "BDTEUPR", + "offset": "0x6C", + "fields": [ + [ + "TIMxEEFR3", + 22, + 1 + ], + [ + "TIMxCR2", + 21, + 1 + ], + [ + "TIMxFLTR", + 20, + 1 + ], + [ + "TIMxOUTR", + 19, + 1 + ], + [ + "TIMxCHPR", + 18, + 1 + ], + [ + "TIMxRSTR", + 17, + 1 + ], + [ + "TIMxEEFR2", + 16, + 1 + ], + [ + "TIMxEEFR1", + 15, + 1 + ], + [ + "TIMxRST2R", + 14, + 1 + ], + [ + "TIMxSET2R", + 13, + 1 + ], + [ + "TIMxRST1R", + 12, + 1 + ], + [ + "TIMxSET1R", + 11, + 1 + ], + [ + "TIMx_DTxR", + 10, + 1 + ], + [ + "TIMxCMP4", + 9, + 1 + ], + [ + "TIMxCMP3", + 8, + 1 + ], + [ + "TIMxCMP2", + 7, + 1 + ], + [ + "TIMxCMP1", + 6, + 1 + ], + [ + "TIMxREP", + 5, + 1 + ], + [ + "TIMxPER", + 4, + 1 + ], + [ + "TIMxCNT", + 3, + 1 + ], + [ + "TIMxDIER", + 2, + 1 + ], + [ + "TIMxICR", + 1, + 1 + ], + [ + "TIMxCR", + 0, + 1 + ] + ] + }, + { + "name": "BDTFUPR", + "offset": "0x74", + "fields": [ + [ + "TIMxEEFR3", + 22, + 1 + ], + [ + "TIMxCR2", + 21, + 1 + ], + [ + "TIMxFLTR", + 20, + 1 + ], + [ + "TIMxOUTR", + 19, + 1 + ], + [ + "TIMxCHPR", + 18, + 1 + ], + [ + "TIMxRSTR", + 17, + 1 + ], + [ + "TIMxEEFR2", + 16, + 1 + ], + [ + "TIMxEEFR1", + 15, + 1 + ], + [ + "TIMxRST2R", + 14, + 1 + ], + [ + "TIMxSET2R", + 13, + 1 + ], + [ + "TIMxRST1R", + 12, + 1 + ], + [ + "TIMxSET1R", + 11, + 1 + ], + [ + "TIMx_DTxR", + 10, + 1 + ], + [ + "TIMxCMP4", + 9, + 1 + ], + [ + "TIMxCMP3", + 8, + 1 + ], + [ + "TIMxCMP2", + 7, + 1 + ], + [ + "TIMxCMP1", + 6, + 1 + ], + [ + "TIMxREP", + 5, + 1 + ], + [ + "TIMxPER", + 4, + 1 + ], + [ + "TIMxCNT", + 3, + 1 + ], + [ + "TIMxDIER", + 2, + 1 + ], + [ + "TIMxICR", + 1, + 1 + ], + [ + "TIMxCR", + 0, + 1 + ] + ] + }, + { + "name": "BDMADR", + "offset": "0x70", + "fields": [ + [ + "BDMADR", + 0, + 32, + "w" + ] + ] + }, + { + "name": "ADCER", + "offset": "0x78", + "fields": [ + [ + "ADC10TRG", + 26, + 5 + ], + [ + "ADC9TRG", + 21, + 5 + ], + [ + "ADC8TRG", + 16, + 5 + ], + [ + "ADC7TRG", + 10, + 5 + ], + [ + "ADC6TRG", + 5, + 5 + ], + [ + "ADC5TRG", + 0, + 5 + ] + ] + }, + { + "name": "ADCUR", + "offset": "0x7C", + "fields": [ + [ + "AD10USRC", + 20, + 3 + ], + [ + "AD9USRC", + 16, + 3 + ], + [ + "AD8USRC", + 12, + 3 + ], + [ + "AD7USRC", + 8, + 3 + ], + [ + "AD6USRC", + 4, + 3 + ], + [ + "AD5USRC", + 0, + 3 + ] + ] + }, + { + "name": "ADCPS1", + "offset": "0x80", + "fields": [ + [ + "ADC5PSC", + 24, + 5 + ], + [ + "ADC4PSC", + 18, + 5 + ], + [ + "ADC3PSC", + 12, + 5 + ], + [ + "ADC2PSC", + 6, + 5 + ], + [ + "ADC1PSC", + 0, + 5 + ] + ] + }, + { + "name": "ADCPS2", + "offset": "0x84", + "fields": [ + [ + "ADC10PSC", + 24, + 5 + ], + [ + "ADC9PSC", + 18, + 5 + ], + [ + "ADC8PSC", + 12, + 5 + ], + [ + "ADC7PSC", + 6, + 5 + ], + [ + "ADC6PSC", + 0, + 5 + ] + ] + }, + { + "name": "FLTINR3", + "offset": "0x88", + "fields": [ + [ + "FLT4RSTM", + 31, + 1 + ], + [ + "FLT4CRES", + 30, + 1 + ], + [ + "FLT4CNT", + 26, + 4 + ], + [ + "FLT4BLKS", + 25, + 1 + ], + [ + "FLT4BLKE", + 24, + 1 + ], + [ + "FLT3RSTM", + 23, + 1 + ], + [ + "FLT3CRES", + 22, + 1 + ], + [ + "FLT3CNT", + 18, + 4 + ], + [ + "FLT3BLKS", + 17, + 1 + ], + [ + "FLT3BLKE", + 16, + 1 + ], + [ + "FLT2RSTM", + 15, + 1 + ], + [ + "FLT2CRES", + 14, + 1 + ], + [ + "FLT2CNT", + 10, + 4 + ], + [ + "FLT2BLKS", + 9, + 1 + ], + [ + "FLT2BLKE", + 8, + 1 + ], + [ + "FLT1RSTM", + 7, + 1 + ], + [ + "FLT1CRES", + 6, + 1 + ], + [ + "FLT1CNT", + 2, + 4 + ], + [ + "FLT1BLKS", + 1, + 1 + ], + [ + "FLT1BLKE", + 0, + 1 + ] + ] + }, + { + "name": "FLTINR4", + "offset": "0x8C", + "fields": [ + [ + "FLT6RSTM", + 15, + 1 + ], + [ + "FLT6CRES", + 14, + 1 + ], + [ + "FLT6CNT", + 10, + 4 + ], + [ + "FLT6BLKS", + 9, + 1 + ], + [ + "FLT6BLKE", + 8, + 1 + ], + [ + "FLT5RSTM", + 7, + 1 + ], + [ + "FLT5CRES", + 6, + 1 + ], + [ + "FLT5CNT", + 2, + 4 + ], + [ + "FLT5BLKS", + 1, + 1 + ], + [ + "FLT5BLKE", + 0, + 1 + ] + ] + } + ] + }, + { + "name": "DMA1", + "base": "0x40020000", + "interrupts": [ + "DMA1_CH1", + "DMA1_CH2", + "DMA1_CH3", + "DMA1_CH4", + "DMA1_CH5", + "DMA1_CH6", + "DMA1_CH7", + "DMA1_CH8" + ], + "registers": [ + { + "name": "ISR", + "offset": "0x00", + "fields": [ + [ + "TEIF8", + 31, + 1, + "r" + ], + [ + "HTIF8", + 30, + 1, + "r" + ], + [ + "TCIF8", + 29, + 1, + "r" + ], + [ + "GIF8", + 28, + 1, + "r" + ], + [ + "TEIF7", + 27, + 1, + "r" + ], + [ + "HTIF7", + 26, + 1, + "r" + ], + [ + "TCIF7", + 25, + 1, + "r" + ], + [ + "GIF7", + 24, + 1, + "r" + ], + [ + "TEIF6", + 23, + 1, + "r" + ], + [ + "HTIF6", + 22, + 1, + "r" + ], + [ + "TCIF6", + 21, + 1, + "r" + ], + [ + "GIF6", + 20, + 1, + "r" + ], + [ + "TEIF5", + 19, + 1, + "r" + ], + [ + "HTIF5", + 18, + 1, + "r" + ], + [ + "TCIF5", + 17, + 1, + "r" + ], + [ + "GIF5", + 16, + 1, + "r" + ], + [ + "TEIF4", + 15, + 1, + "r" + ], + [ + "HTIF4", + 14, + 1, + "r" + ], + [ + "TCIF4", + 13, + 1, + "r" + ], + [ + "GIF4", + 12, + 1, + "r" + ], + [ + "TEIF3", + 11, + 1, + "r" + ], + [ + "HTIF3", + 10, + 1, + "r" + ], + [ + "TCIF3", + 9, + 1, + "r" + ], + [ + "GIF3", + 8, + 1, + "r" + ], + [ + "TEIF2", + 7, + 1, + "r" + ], + [ + "HTIF2", + 6, + 1, + "r" + ], + [ + "TCIF2", + 5, + 1, + "r" + ], + [ + "GIF2", + 4, + 1, + "r" + ], + [ + "TEIF1", + 3, + 1, + "r" + ], + [ + "HTIF1", + 2, + 1, + "r" + ], + [ + "TCIF1", + 1, + 1, + "r" + ], + [ + "GIF1", + 0, + 1, + "r" + ] + ] + }, + { + "name": "IFCR", + "offset": "0x04", + "fields": [ + [ + "TEIF8", + 31, + 1, + "w" + ], + [ + "HTIF8", + 30, + 1, + "w" + ], + [ + "TCIF8", + 29, + 1, + "w" + ], + [ + "GIF8", + 28, + 1, + "w" + ], + [ + "TEIF7", + 27, + 1, + "w" + ], + [ + "HTIF7", + 26, + 1, + "w" + ], + [ + "TCIF7", + 25, + 1, + "w" + ], + [ + "GIF7", + 24, + 1, + "w" + ], + [ + "TEIF6", + 23, + 1, + "w" + ], + [ + "HTIF6", + 22, + 1, + "w" + ], + [ + "TCIF6", + 21, + 1, + "w" + ], + [ + "GIF6", + 20, + 1, + "w" + ], + [ + "TEIF5", + 19, + 1, + "w" + ], + [ + "HTIF5", + 18, + 1, + "w" + ], + [ + "TCIF5", + 17, + 1, + "w" + ], + [ + "GIF5", + 16, + 1, + "w" + ], + [ + "TEIF4", + 15, + 1, + "w" + ], + [ + "HTIF4", + 14, + 1, + "w" + ], + [ + "TCIF4", + 13, + 1, + "w" + ], + [ + "GIF4", + 12, + 1, + "w" + ], + [ + "TEIF3", + 11, + 1, + "w" + ], + [ + "HTIF3", + 10, + 1, + "w" + ], + [ + "TCIF3", + 9, + 1, + "w" + ], + [ + "GIF3", + 8, + 1, + "w" + ], + [ + "TEIF2", + 7, + 1, + "w" + ], + [ + "HTIF2", + 6, + 1, + "w" + ], + [ + "TCIF2", + 5, + 1, + "w" + ], + [ + "GIF2", + 4, + 1, + "w" + ], + [ + "TEIF1", + 3, + 1, + "w" + ], + [ + "HTIF1", + 2, + 1, + "w" + ], + [ + "TCIF1", + 1, + 1, + "w" + ], + [ + "GIF1", + 0, + 1, + "w" + ] + ] + }, + { + "name": "CCR1", + "offset": "0x08", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "TCIE", + 1, + 1 + ], + [ + "HTIE", + 2, + 1 + ], + [ + "TEIE", + 3, + 1 + ], + [ + "DIR", + 4, + 1 + ], + [ + "CIRC", + 5, + 1 + ], + [ + "PINC", + 6, + 1 + ], + [ + "MINC", + 7, + 1 + ], + [ + "PSIZE", + 8, + 2 + ], + [ + "MSIZE", + 10, + 2 + ], + [ + "PL", + 12, + 2 + ], + [ + "MEM2MEM", + 14, + 1 + ] + ] + }, + { + "name": "CCR2", + "offset": "0x1C", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "TCIE", + 1, + 1 + ], + [ + "HTIE", + 2, + 1 + ], + [ + "TEIE", + 3, + 1 + ], + [ + "DIR", + 4, + 1 + ], + [ + "CIRC", + 5, + 1 + ], + [ + "PINC", + 6, + 1 + ], + [ + "MINC", + 7, + 1 + ], + [ + "PSIZE", + 8, + 2 + ], + [ + "MSIZE", + 10, + 2 + ], + [ + "PL", + 12, + 2 + ], + [ + "MEM2MEM", + 14, + 1 + ] + ] + }, + { + "name": "CCR3", + "offset": "0x30", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "TCIE", + 1, + 1 + ], + [ + "HTIE", + 2, + 1 + ], + [ + "TEIE", + 3, + 1 + ], + [ + "DIR", + 4, + 1 + ], + [ + "CIRC", + 5, + 1 + ], + [ + "PINC", + 6, + 1 + ], + [ + "MINC", + 7, + 1 + ], + [ + "PSIZE", + 8, + 2 + ], + [ + "MSIZE", + 10, + 2 + ], + [ + "PL", + 12, + 2 + ], + [ + "MEM2MEM", + 14, + 1 + ] + ] + }, + { + "name": "CCR4", + "offset": "0x44", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "TCIE", + 1, + 1 + ], + [ + "HTIE", + 2, + 1 + ], + [ + "TEIE", + 3, + 1 + ], + [ + "DIR", + 4, + 1 + ], + [ + "CIRC", + 5, + 1 + ], + [ + "PINC", + 6, + 1 + ], + [ + "MINC", + 7, + 1 + ], + [ + "PSIZE", + 8, + 2 + ], + [ + "MSIZE", + 10, + 2 + ], + [ + "PL", + 12, + 2 + ], + [ + "MEM2MEM", + 14, + 1 + ] + ] + }, + { + "name": "CCR5", + "offset": "0x58", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "TCIE", + 1, + 1 + ], + [ + "HTIE", + 2, + 1 + ], + [ + "TEIE", + 3, + 1 + ], + [ + "DIR", + 4, + 1 + ], + [ + "CIRC", + 5, + 1 + ], + [ + "PINC", + 6, + 1 + ], + [ + "MINC", + 7, + 1 + ], + [ + "PSIZE", + 8, + 2 + ], + [ + "MSIZE", + 10, + 2 + ], + [ + "PL", + 12, + 2 + ], + [ + "MEM2MEM", + 14, + 1 + ] + ] + }, + { + "name": "CCR6", + "offset": "0x6C", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "TCIE", + 1, + 1 + ], + [ + "HTIE", + 2, + 1 + ], + [ + "TEIE", + 3, + 1 + ], + [ + "DIR", + 4, + 1 + ], + [ + "CIRC", + 5, + 1 + ], + [ + "PINC", + 6, + 1 + ], + [ + "MINC", + 7, + 1 + ], + [ + "PSIZE", + 8, + 2 + ], + [ + "MSIZE", + 10, + 2 + ], + [ + "PL", + 12, + 2 + ], + [ + "MEM2MEM", + 14, + 1 + ] + ] + }, + { + "name": "CCR7", + "offset": "0x80", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "TCIE", + 1, + 1 + ], + [ + "HTIE", + 2, + 1 + ], + [ + "TEIE", + 3, + 1 + ], + [ + "DIR", + 4, + 1 + ], + [ + "CIRC", + 5, + 1 + ], + [ + "PINC", + 6, + 1 + ], + [ + "MINC", + 7, + 1 + ], + [ + "PSIZE", + 8, + 2 + ], + [ + "MSIZE", + 10, + 2 + ], + [ + "PL", + 12, + 2 + ], + [ + "MEM2MEM", + 14, + 1 + ] + ] + }, + { + "name": "CCR8", + "offset": "0x94", + "fields": [ + [ + "EN", + 0, + 1 + ], + [ + "TCIE", + 1, + 1 + ], + [ + "HTIE", + 2, + 1 + ], + [ + "TEIE", + 3, + 1 + ], + [ + "DIR", + 4, + 1 + ], + [ + "CIRC", + 5, + 1 + ], + [ + "PINC", + 6, + 1 + ], + [ + "MINC", + 7, + 1 + ], + [ + "PSIZE", + 8, + 2 + ], + [ + "MSIZE", + 10, + 2 + ], + [ + "PL", + 12, + 2 + ], + [ + "MEM2MEM", + 14, + 1 + ] + ] + }, + { + "name": "CNDTR1", + "offset": "0x0C", + "fields": [ + [ + "NDT", + 0, + 16 + ] + ] + }, + { + "name": "CNDTR2", + "offset": "0x20", + "fields": [ + [ + "NDT", + 0, + 16 + ] + ] + }, + { + "name": "CNDTR3", + "offset": "0x34", + "fields": [ + [ + "NDT", + 0, + 16 + ] + ] + }, + { + "name": "CNDTR4", + "offset": "0x48", + "fields": [ + [ + "NDT", + 0, + 16 + ] + ] + }, + { + "name": "CNDTR5", + "offset": "0x5C", + "fields": [ + [ + "NDT", + 0, + 16 + ] + ] + }, + { + "name": "CNDTR6", + "offset": "0x70", + "fields": [ + [ + "NDT", + 0, + 16 + ] + ] + }, + { + "name": "CNDTR7", + "offset": "0x84", + "fields": [ + [ + "NDT", + 0, + 16 + ] + ] + }, + { + "name": "CNDTR8", + "offset": "0x98", + "fields": [ + [ + "NDT", + 0, + 16 + ] + ] + }, + { + "name": "CPAR1", + "offset": "0x10", + "fields": [ + [ + "PA", + 0, + 32 + ] + ] + }, + { + "name": "CPAR2", + "offset": "0x24", + "fields": [ + [ + "PA", + 0, + 32 + ] + ] + }, + { + "name": "CPAR3", + "offset": "0x38", + "fields": [ + [ + "PA", + 0, + 32 + ] + ] + }, + { + "name": "CPAR4", + "offset": "0x4C", + "fields": [ + [ + "PA", + 0, + 32 + ] + ] + }, + { + "name": "CPAR5", + "offset": "0x60", + "fields": [ + [ + "PA", + 0, + 32 + ] + ] + }, + { + "name": "CPAR6", + "offset": "0x74", + "fields": [ + [ + "PA", + 0, + 32 + ] + ] + }, + { + "name": "CPAR7", + "offset": "0x88", + "fields": [ + [ + "PA", + 0, + 32 + ] + ] + }, + { + "name": "CPAR8", + "offset": "0x9C", + "fields": [ + [ + "PA", + 0, + 32 + ] + ] + }, + { + "name": "CMAR1", + "offset": "0x14", + "fields": [ + [ + "MA", + 0, + 32 + ] + ] + }, + { + "name": "CMAR2", + "offset": "0x28", + "fields": [ + [ + "MA", + 0, + 32 + ] + ] + }, + { + "name": "CMAR3", + "offset": "0x3C", + "fields": [ + [ + "MA", + 0, + 32 + ] + ] + }, + { + "name": "CMAR4", + "offset": "0x50", + "fields": [ + [ + "MA", + 0, + 32 + ] + ] + }, + { + "name": "CMAR5", + "offset": "0x64", + "fields": [ + [ + "MA", + 0, + 32 + ] + ] + }, + { + "name": "CMAR6", + "offset": "0x78", + "fields": [ + [ + "MA", + 0, + 32 + ] + ] + }, + { + "name": "CMAR7", + "offset": "0x8C", + "fields": [ + [ + "MA", + 0, + 32 + ] + ] + }, + { + "name": "CMAR8", + "offset": "0xA0", + "fields": [ + [ + "MA", + 0, + 32 + ] + ] + } + ] + }, + { + "name": "DMA2", + "base": "0x40020400", + "interrupts": [ + "DMA2_CH1", + "DMA2_CH2", + "DMA2_CH3", + "DMA2_CH4", + "DMA2_CH5", + "DMA2_CH6", + "DMA2_CH7", + "DMA2_CH8" + ], + "derived_from": "DMA1" + }, + { + "name": "DMAMUX", + "base": "0x40020800", + "interrupts": [ + "DMAMUX_OVR" + ], + "registers": [ + { + "name": "C0CR", + "offset": "0x00", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C1CR", + "offset": "0x04", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C2CR", + "offset": "0x08", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C3CR", + "offset": "0x0C", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C4CR", + "offset": "0x10", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C5CR", + "offset": "0x14", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C6CR", + "offset": "0x18", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C7CR", + "offset": "0x1C", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C8CR", + "offset": "0x20", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C9CR", + "offset": "0x24", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C10CR", + "offset": "0x28", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C11CR", + "offset": "0x2C", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C12CR", + "offset": "0x30", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C13CR", + "offset": "0x34", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C14CR", + "offset": "0x38", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "C15CR", + "offset": "0x3C", + "fields": [ + [ + "DMAREQ_ID", + 0, + 7 + ], + [ + "SOIE", + 8, + 1 + ], + [ + "EGE", + 9, + 1 + ], + [ + "SE", + 16, + 1 + ], + [ + "SPOL", + 17, + 2 + ], + [ + "NBREQ", + 19, + 5 + ], + [ + "SYNC_ID", + 24, + 5 + ] + ] + }, + { + "name": "RG0CR", + "offset": "0x100", + "fields": [ + [ + "SIG_ID", + 0, + 5 + ], + [ + "OIE", + 8, + 1 + ], + [ + "GE", + 16, + 1 + ], + [ + "GPOL", + 17, + 2 + ], + [ + "GNBREQ", + 19, + 5 + ] + ] + }, + { + "name": "RG1CR", + "offset": "0x104", + "fields": [ + [ + "SIG_ID", + 0, + 5 + ], + [ + "OIE", + 8, + 1 + ], + [ + "GE", + 16, + 1 + ], + [ + "GPOL", + 17, + 2 + ], + [ + "GNBREQ", + 19, + 5 + ] + ] + }, + { + "name": "RG2CR", + "offset": "0x108", + "fields": [ + [ + "SIG_ID", + 0, + 5 + ], + [ + "OIE", + 8, + 1 + ], + [ + "GE", + 16, + 1 + ], + [ + "GPOL", + 17, + 2 + ], + [ + "GNBREQ", + 19, + 5 + ] + ] + }, + { + "name": "RG3CR", + "offset": "0x10C", + "fields": [ + [ + "SIG_ID", + 0, + 5 + ], + [ + "OIE", + 8, + 1 + ], + [ + "GE", + 16, + 1 + ], + [ + "GPOL", + 17, + 2 + ], + [ + "GNBREQ", + 19, + 5 + ] + ] + }, + { + "name": "RGSR", + "offset": "0x140", + "fields": [ + [ + "OF", + 0, + 4, + "r" + ] + ] + }, + { + "name": "RGCFR", + "offset": "0x144", + "fields": [ + [ + "COF", + 0, + 4, + "w" + ] + ] + }, + { + "name": "CSR", + "offset": "0x80", + "fields": [ + [ + "SOF", + 0, + 16, + "r" + ] + ] + }, + { + "name": "CFR", + "offset": "0x84", + "fields": [ + [ + "CSOF", + 0, + 16, + "w" + ] + ] + } + ] + }, + { + "name": "CORDIC", + "base": "0x40020C00", + "interrupts": [ + "Cordic" + ], + "registers": [ + { + "name": "CSR", + "offset": "0x00", + "fields": [ + [ + "FUNC", + 0, + 4 + ], + [ + "PRECISION", + 4, + 4 + ], + [ + "SCALE", + 8, + 3 + ], + [ + "IEN", + 16, + 1 + ], + [ + "DMAREN", + 17, + 1 + ], + [ + "DMAWEN", + 18, + 1 + ], + [ + "NRES", + 19, + 1 + ], + [ + "NARGS", + 20, + 1 + ], + [ + "RESSIZE", + 21, + 1 + ], + [ + "ARGSIZE", + 22, + 1 + ], + [ + "RRDY", + 31, + 1 + ] + ] + }, + { + "name": "WDATA", + "offset": "0x04", + "fields": [ + [ + "ARG", + 0, + 32 + ] + ] + }, + { + "name": "RDATA", + "offset": "0x08", + "fields": [ + [ + "RES", + 0, + 32, + "r" + ] + ] + } + ] + }, + { + "name": "RCC", + "base": "0x40021000", + "interrupts": [ + "RCC" + ], + "registers": [ + { + "name": "CR", + "offset": "0x00", + "reset": "0x00000500", + "fields": [ + [ + "HSION", + 8, + 1 + ], + [ + "HSIKERON", + 9, + 1 + ], + [ + "HSIRDY", + 10, + 1, + "r" + ], + [ + "HSEON", + 16, + 1 + ], + [ + "HSERDY", + 17, + 1, + "r" + ], + [ + "HSEBYP", + 18, + 1 + ], + [ + "CSSON", + 19, + 1 + ], + [ + "PLLON", + 24, + 1 + ], + [ + "PLLRDY", + 25, + 1, + "r" + ] + ] + }, + { + "name": "ICSCR", + "offset": "0x04", + "reset": "0x40000000", + "fields": [ + [ + "HSICAL", + 16, + 8, + "r" + ], + [ + "HSITRIM", + 24, + 7 + ] + ] + }, + { + "name": "CFGR", + "offset": "0x08", + "reset": "0x00000005", + "fields": [ + [ + "SW", + 0, + 2 + ], + [ + "SWS", + 2, + 2, + "r" + ], + [ + "HPRE", + 4, + 4 + ], + [ + "PPRE1", + 8, + 3 + ], + [ + "PPRE2", + 11, + 3 + ], + [ + "MCOSEL", + 24, + 4 + ], + [ + "MCOPRE", + 28, + 3 + ] + ] + }, + { + "name": "PLLCFGR", + "offset": "0x0C", + "reset": "0x00001000", + "fields": [ + [ + "PLLSRC", + 0, + 2 + ], + [ + "PLLM", + 4, + 4 + ], + [ + "PLLN", + 8, + 7 + ], + [ + "PLLPEN", + 16, + 1 + ], + [ + "PLLP", + 17, + 1 + ], + [ + "PLLQEN", + 20, + 1 + ], + [ + "PLLQ", + 21, + 2 + ], + [ + "PLLREN", + 24, + 1 + ], + [ + "PLLR", + 25, + 2 + ], + [ + "PLLPDIV", + 27, + 5 + ] + ] + }, + { + "name": "CIER", + "offset": "0x18", + "fields": [ + [ + "LSIRDYIE", + 0, + 1 + ], + [ + "LSERDYIE", + 1, + 1 + ], + [ + "HSIRDYIE", + 3, + 1 + ], + [ + "HSERDYIE", + 4, + 1 + ], + [ + "PLLRDYIE", + 5, + 1 + ], + [ + "LSECSSIE", + 9, + 1 + ], + [ + "HSI48RDYIE", + 10, + 1 + ] + ] + }, + { + "name": "CIFR", + "offset": "0x1C", + "fields": [ + [ + "LSIRDYF", + 0, + 1, + "r" + ], + [ + "LSERDYF", + 1, + 1, + "r" + ], + [ + "HSIRDYF", + 3, + 1, + "r" + ], + [ + "HSERDYF", + 4, + 1, + "r" + ], + [ + "PLLRDYF", + 5, + 1, + "r" + ], + [ + "CSSF", + 8, + 1, + "r" + ], + [ + "LSECSSF", + 9, + 1, + "r" + ], + [ + "HSI48RDYF", + 10, + 1, + "r" + ] + ] + }, + { + "name": "CICR", + "offset": "0x20", + "fields": [ + [ + "LSIRDYC", + 0, + 1, + "w" + ], + [ + "LSERDYC", + 1, + 1, + "w" + ], + [ + "HSIRDYC", + 3, + 1, + "w" + ], + [ + "HSERDYC", + 4, + 1, + "w" + ], + [ + "PLLRDYC", + 5, + 1, + "w" + ], + [ + "CSSC", + 8, + 1, + "w" + ], + [ + "LSECSSC", + 9, + 1, + "w" + ], + [ + "HSI48RDYC", + 10, + 1, + "w" + ] + ] + }, + { + "name": "AHB1RSTR", + "offset": "0x28", + "fields": [ + [ + "DMA1RST", + 0, + 1 + ], + [ + "DMA2RST", + 1, + 1 + ], + [ + "DMAMUX1RST", + 2, + 1 + ], + [ + "CORDICRST", + 3, + 1 + ], + [ + "FMACRST", + 4, + 1 + ], + [ + "FLASHRST", + 8, + 1 + ], + [ + "CRCRST", + 12, + 1 + ] + ] + }, + { + "name": "AHB2RSTR", + "offset": "0x2C", + "fields": [ + [ + "GPIOARST", + 0, + 1 + ], + [ + "GPIOBRST", + 1, + 1 + ], + [ + "GPIOCRST", + 2, + 1 + ], + [ + "GPIODRST", + 3, + 1 + ], + [ + "GPIOERST", + 4, + 1 + ], + [ + "GPIOFRST", + 5, + 1 + ], + [ + "GPIOGRST", + 6, + 1 + ], + [ + "ADC12RST", + 13, + 1 + ], + [ + "ADC345RST", + 14, + 1 + ], + [ + "DAC1RST", + 16, + 1 + ], + [ + "DAC2RST", + 17, + 1 + ], + [ + "DAC3RST", + 18, + 1 + ], + [ + "DAC4RST", + 19, + 1 + ], + [ + "AESRST", + 24, + 1 + ], + [ + "RNGRST", + 26, + 1 + ] + ] + }, + { + "name": "AHB3RSTR", + "offset": "0x30", + "fields": [ + [ + "FMCRST", + 0, + 1 + ], + [ + "QSPIRST", + 8, + 1 + ] + ] + }, + { + "name": "APB1RSTR1", + "offset": "0x38", + "fields": [ + [ + "TIM2RST", + 0, + 1 + ], + [ + "TIM3RST", + 1, + 1 + ], + [ + "TIM4RST", + 2, + 1 + ], + [ + "TIM5RST", + 3, + 1 + ], + [ + "TIM6RST", + 4, + 1 + ], + [ + "TIM7RST", + 5, + 1 + ], + [ + "CRSRST", + 8, + 1 + ], + [ + "SPI2RST", + 14, + 1 + ], + [ + "SPI3RST", + 15, + 1 + ], + [ + "USART2RST", + 17, + 1 + ], + [ + "USART3RST", + 18, + 1 + ], + [ + "UART4RST", + 19, + 1 + ], + [ + "UART5RST", + 20, + 1 + ], + [ + "I2C1RST", + 21, + 1 + ], + [ + "I2C2RST", + 22, + 1 + ], + [ + "USBRST", + 23, + 1 + ], + [ + "FDCANRST", + 25, + 1 + ], + [ + "PWRRST", + 28, + 1 + ], + [ + "I2C3RST", + 30, + 1 + ], + [ + "LPTIM1RST", + 31, + 1 + ] + ] + }, + { + "name": "APB1RSTR2", + "offset": "0x3C", + "fields": [ + [ + "LPUART1RST", + 0, + 1 + ], + [ + "I2C4RST", + 1, + 1 + ], + [ + "UCPD1RST", + 8, + 1 + ] + ] + }, + { + "name": "APB2RSTR", + "offset": "0x40", + "fields": [ + [ + "SYSCFGRST", + 0, + 1 + ], + [ + "TIM1RST", + 11, + 1 + ], + [ + "SPI1RST", + 12, + 1 + ], + [ + "TIM8RST", + 13, + 1 + ], + [ + "USART1RST", + 14, + 1 + ], + [ + "SPI4RST", + 15, + 1 + ], + [ + "TIM15RST", + 16, + 1 + ], + [ + "TIM16RST", + 17, + 1 + ], + [ + "TIM17RST", + 18, + 1 + ], + [ + "TIM20RST", + 20, + 1 + ], + [ + "SAI1RST", + 21, + 1 + ], + [ + "HRTIM1RST", + 26, + 1 + ] + ] + }, + { + "name": "AHB1ENR", + "offset": "0x48", + "reset": "0x00000100", + "fields": [ + [ + "DMA1EN", + 0, + 1 + ], + [ + "DMA2EN", + 1, + 1 + ], + [ + "DMAMUX1EN", + 2, + 1 + ], + [ + "CORDICEN", + 3, + 1 + ], + [ + "FMACEN", + 4, + 1 + ], + [ + "FLASHEN", + 8, + 1 + ], + [ + "CRCEN", + 12, + 1 + ] + ] + }, + { + "name": "AHB2ENR", + "offset": "0x4C", + "fields": [ + [ + "GPIOAEN", + 0, + 1 + ], + [ + "GPIOBEN", + 1, + 1 + ], + [ + "GPIOCEN", + 2, + 1 + ], + [ + "GPIODEN", + 3, + 1 + ], + [ + "GPIOEEN", + 4, + 1 + ], + [ + "GPIOFEN", + 5, + 1 + ], + [ + "GPIOGEN", + 6, + 1 + ], + [ + "ADC12EN", + 13, + 1 + ], + [ + "ADC345EN", + 14, + 1 + ], + [ + "DAC1EN", + 16, + 1 + ], + [ + "DAC2EN", + 17, + 1 + ], + [ + "DAC3EN", + 18, + 1 + ], + [ + "DAC4EN", + 19, + 1 + ], + [ + "AESEN", + 24, + 1 + ], + [ + "RNGEN", + 26, + 1 + ] + ] + }, + { + "name": "AHB3ENR", + "offset": "0x50", + "fields": [ + [ + "FMCEN", + 0, + 1 + ], + [ + "QSPIEN", + 8, + 1 + ] + ] + }, + { + "name": "APB1ENR1", + "offset": "0x58", + "reset": "0x00000400", + "fields": [ + [ + "TIM2EN", + 0, + 1 + ], + [ + "TIM3EN", + 1, + 1 + ], + [ + "TIM4EN", + 2, + 1 + ], + [ + "TIM5EN", + 3, + 1 + ], + [ + "TIM6EN", + 4, + 1 + ], + [ + "TIM7EN", + 5, + 1 + ], + [ + "CRSEN", + 8, + 1 + ], + [ + "RTCAPBEN", + 10, + 1 + ], + [ + "WWDGEN", + 11, + 1 + ], + [ + "SPI2EN", + 14, + 1 + ], + [ + "SPI3EN", + 15, + 1 + ], + [ + "USART2EN", + 17, + 1 + ], + [ + "USART3EN", + 18, + 1 + ], + [ + "UART4EN", + 19, + 1 + ], + [ + "UART5EN", + 20, + 1 + ], + [ + "I2C1EN", + 21, + 1 + ], + [ + "I2C2EN", + 22, + 1 + ], + [ + "USBEN", + 23, + 1 + ], + [ + "FDCANEN", + 25, + 1 + ], + [ + "PWREN", + 28, + 1 + ], + [ + "I2C3EN", + 30, + 1 + ], + [ + "LPTIM1EN", + 31, + 1 + ] + ] + }, + { + "name": "APB1ENR2", + "offset": "0x5C", + "fields": [ + [ + "LPUART1EN", + 0, + 1 + ], + [ + "I2C4EN", + 1, + 1 + ], + [ + "UCPD1EN", + 8, + 1 + ] + ] + }, + { + "name": "APB2ENR", + "offset": "0x60", + "fields": [ + [ + "SYSCFGEN", + 0, + 1 + ], + [ + "TIM1EN", + 11, + 1 + ], + [ + "SPI1EN", + 12, + 1 + ], + [ + "TIM8EN", + 13, + 1 + ], + [ + "USART1EN", + 14, + 1 + ], + [ + "SPI4EN", + 15, + 1 + ], + [ + "TIM15EN", + 16, + 1 + ], + [ + "TIM16EN", + 17, + 1 + ], + [ + "TIM17EN", + 18, + 1 + ], + [ + "TIM20EN", + 20, + 1 + ], + [ + "SAI1EN", + 21, + 1 + ], + [ + "HRTIM1EN", + 26, + 1 + ] + ] + }, + { + "name": "AHB1SMENR", + "offset": "0x68", + "reset": "0x0000130F", + "fields": [ + [ + "DMA1SMEN", + 0, + 1 + ], + [ + "DMA2SMEN", + 1, + 1 + ], + [ + "DMAMUX1SMEN", + 2, + 1 + ], + [ + "CORDICSMEN", + 3, + 1 + ], + [ + "FMACSMEN", + 4, + 1 + ], + [ + "FLASHSMEN", + 8, + 1 + ], + [ + "SRAM1SMEN", + 9, + 1 + ], + [ + "CRCSMEN", + 12, + 1 + ] + ] + }, + { + "name": "AHB2SMENR", + "offset": "0x6C", + "reset": "0x050F667F", + "fields": [ + [ + "GPIOASMEN", + 0, + 1 + ], + [ + "GPIOBSMEN", + 1, + 1 + ], + [ + "GPIOCSMEN", + 2, + 1 + ], + [ + "GPIODSMEN", + 3, + 1 + ], + [ + "GPIOESMEN", + 4, + 1 + ], + [ + "GPIOFSMEN", + 5, + 1 + ], + [ + "GPIOGSMEN", + 6, + 1 + ], + [ + "CCMSRAMSMEN", + 9, + 1 + ], + [ + "SRAM2SMEN", + 10, + 1 + ], + [ + "ADC12SMEN", + 13, + 1 + ], + [ + "ADC345SMEN", + 14, + 1 + ], + [ + "DAC1SMEN", + 16, + 1 + ], + [ + "DAC2SMEN", + 17, + 1 + ], + [ + "DAC3SMEN", + 18, + 1 + ], + [ + "DAC4SMEN", + 19, + 1 + ], + [ + "AESSMEN", + 24, + 1 + ], + [ + "RNGEN", + 26, + 1 + ] + ] + }, + { + "name": "AHB3SMENR", + "offset": "0x70", + "reset": "0x00000101", + "fields": [ + [ + "FMCSMEN", + 0, + 1 + ], + [ + "QSPISMEN", + 8, + 1 + ] + ] + }, + { + "name": "APB1SMENR1", + "offset": "0x78", + "reset": "0xD2FECD3F", + "fields": [ + [ + "TIM2SMEN", + 0, + 1 + ], + [ + "TIM3SMEN", + 1, + 1 + ], + [ + "TIM4SMEN", + 2, + 1 + ], + [ + "TIM5SMEN", + 3, + 1 + ], + [ + "TIM6SMEN", + 4, + 1 + ], + [ + "TIM7SMEN", + 5, + 1 + ], + [ + "CRSSMEN", + 8, + 1 + ], + [ + "RTCAPBSMEN", + 10, + 1 + ], + [ + "WWDGSMEN", + 11, + 1 + ], + [ + "SPI2SMEN", + 14, + 1 + ], + [ + "SPI3SMEN", + 15, + 1 + ], + [ + "USART2SMEN", + 17, + 1 + ], + [ + "USART3SMEN", + 18, + 1 + ], + [ + "UART4SMEN", + 19, + 1 + ], + [ + "UART5SMEN", + 20, + 1 + ], + [ + "I2C1SMEN", + 21, + 1 + ], + [ + "I2C2SMEN", + 22, + 1 + ], + [ + "USBSMEN", + 23, + 1 + ], + [ + "FDCANSMEN", + 25, + 1 + ], + [ + "PWRSMEN", + 28, + 1 + ], + [ + "I2C3SMEN", + 30, + 1 + ], + [ + "LPTIM1SMEN", + 31, + 1 + ] + ] + }, + { + "name": "APB1SMENR2", + "offset": "0x7C", + "reset": "0x00000103", + "fields": [ + [ + "LPUART1SMEN", + 0, + 1 + ], + [ + "I2C4SMEN", + 1, + 1 + ], + [ + "UCPD1SMEN", + 8, + 1 + ] + ] + }, + { + "name": "APB2SMENR", + "offset": "0x80", + "reset": "0x0437F801", + "fields": [ + [ + "SYSCFGSMEN", + 0, + 1 + ], + [ + "TIM1SMEN", + 11, + 1 + ], + [ + "SPI1SMEN", + 12, + 1 + ], + [ + "TIM8SMEN", + 13, + 1 + ], + [ + "USART1SMEN", + 14, + 1 + ], + [ + "SPI4SMEN", + 15, + 1 + ], + [ + "TIM15SMEN", + 16, + 1 + ], + [ + "TIM16SMEN", + 17, + 1 + ], + [ + "TIM17SMEN", + 18, + 1 + ], + [ + "TIM20SMEN", + 20, + 1 + ], + [ + "SAI1SMEN", + 21, + 1 + ], + [ + "HRTIM1SMEN", + 26, + 1 + ] + ] + }, + { + "name": "CCIPR", + "offset": "0x88", + "fields": [ + [ + "USART1SEL", + 0, + 2 + ], + [ + "USART2SEL", + 2, + 2 + ], + [ + "USART3SEL", + 4, + 2 + ], + [ + "UART4SEL", + 6, + 2 + ], + [ + "UART5SEL", + 8, + 2 + ], + [ + "LPUART1SEL", + 10, + 2 + ], + [ + "I2C1SEL", + 12, + 2 + ], + [ + "I2C2SEL", + 14, + 2 + ], + [ + "I2C3SEL", + 16, + 2 + ], + [ + "LPTIM1SEL", + 18, + 2 + ], + [ + "SAI1SEL", + 20, + 2 + ], + [ + "I2S23SEL", + 22, + 2 + ], + [ + "FDCANSEL", + 24, + 2 + ], + [ + "CLK48SEL", + 26, + 2 + ], + [ + "ADC12SEL", + 28, + 2 + ], + [ + "ADC345SEL", + 30, + 2 + ] + ] + }, + { + "name": "BDCR", + "offset": "0x90", + "fields": [ + [ + "LSEON", + 0, + 1 + ], + [ + "LSERDY", + 1, + 1, + "r" + ], + [ + "LSEBYP", + 2, + 1 + ], + [ + "LSEDRV", + 3, + 2 + ], + [ + "LSECSSON", + 5, + 1 + ], + [ + "LSECSSD", + 6, + 1, + "r" + ], + [ + "RTCSEL", + 8, + 2 + ], + [ + "RTCEN", + 15, + 1 + ], + [ + "BDRST", + 16, + 1 + ], + [ + "LSCOEN", + 24, + 1 + ], + [ + "LSCOSEL", + 25, + 1 + ] + ] + }, + { + "name": "CSR", + "offset": "0x94", + "reset": "0x0C000000", + "fields": [ + [ + "LSION", + 0, + 1 + ], + [ + "LSIRDY", + 1, + 1, + "r" + ], + [ + "RMVF", + 23, + 1 + ], + [ + "OBLRSTF", + 25, + 1, + "r" + ], + [ + "PINRSTF", + 26, + 1, + "r" + ], + [ + "BORRSTF", + 27, + 1, + "r" + ], + [ + "SFTRSTF", + 28, + 1, + "r" + ], + [ + "IWDGRSTF", + 29, + 1, + "r" + ], + [ + "WWDGRSTF", + 30, + 1, + "r" + ], + [ + "LPWRRSTF", + 31, + 1, + "r" + ] + ] + }, + { + "name": "CRRCR", + "offset": "0x98", + "fields": [ + [ + "HSI48ON", + 0, + 1 + ], + [ + "HSI48RDY", + 1, + 1, + "r" + ], + [ + "HSI48CAL", + 7, + 9, + "r" + ] + ] + }, + { + "name": "CCIPR2", + "offset": "0x9C", + "fields": [ + [ + "I2C4SEL", + 0, + 2 + ], + [ + "QSPISEL", + 20, + 2 + ] + ] + } + ] + }, + { + "name": "FMAC", + "base": "0x40021400", + "interrupts": [ + "FMAC" + ], + "registers": [ + { + "name": "X1BUFCFG", + "offset": "0x00", + "fields": [ + [ + "X1_BASE", + 0, + 8 + ], + [ + "X1_BUF_SIZE", + 8, + 8 + ], + [ + "FULL_WM", + 24, + 2 + ] + ] + }, + { + "name": "X2BUFCFG", + "offset": "0x04", + "fields": [ + [ + "X2_BASE", + 0, + 8 + ], + [ + "X2_BUF_SIZE", + 8, + 8 + ] + ] + }, + { + "name": "YBUFCFG", + "offset": "0x08", + "fields": [ + [ + "Y_BASE", + 0, + 8 + ], + [ + "Y_BUF_SIZE", + 8, + 8 + ], + [ + "EMPTY_WM", + 24, + 2 + ] + ] + }, + { + "name": "PARAM", + "offset": "0x0C", + "fields": [ + [ + "START", + 31, + 1 + ], + [ + "FUNC", + 24, + 7 + ], + [ + "R", + 16, + 8 + ], + [ + "Q", + 8, + 8 + ], + [ + "P", + 0, + 8 + ] + ] + }, + { + "name": "CR", + "offset": "0x10", + "fields": [ + [ + "RESET", + 16, + 1 + ], + [ + "CLIPEN", + 15, + 1 + ], + [ + "DMAWEN", + 9, + 1 + ], + [ + "DMAREN", + 8, + 1 + ], + [ + "SATIEN", + 4, + 1 + ], + [ + "UNFLIEN", + 3, + 1 + ], + [ + "OVFLIEN", + 2, + 1 + ], + [ + "WIEN", + 1, + 1 + ], + [ + "RIEN", + 0, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x14", + "fields": [ + [ + "YEMPTY", + 0, + 1, + "r" + ], + [ + "X1FULL", + 1, + 1, + "r" + ], + [ + "OVFL", + 8, + 1, + "r" + ], + [ + "UNFL", + 9, + 1, + "r" + ], + [ + "SAT", + 10, + 1, + "r" + ] + ] + }, + { + "name": "WDATA", + "offset": "0x18", + "fields": [ + [ + "WDATA", + 0, + 16, + "w" + ] + ] + }, + { + "name": "RDATA", + "offset": "0x1C", + "fields": [ + [ + "RDATA", + 0, + 16, + "r" + ] + ] + } + ] + }, + { + "name": "FLASH", + "base": "0x40022000", + "interrupts": [ + "FLASH" + ], + "registers": [ + { + "name": "ACR", + "offset": "0x00", + "reset": "0x00040601", + "fields": [ + [ + "LATENCY", + 0, + 4 + ], + [ + "PRFTEN", + 8, + 1 + ], + [ + "ICEN", + 9, + 1 + ], + [ + "DCEN", + 10, + 1 + ], + [ + "ICRST", + 11, + 1 + ], + [ + "DCRST", + 12, + 1 + ], + [ + "RUN_PD", + 13, + 1 + ], + [ + "SLEEP_PD", + 14, + 1 + ], + [ + "DBG_SWEN", + 18, + 1 + ] + ] + }, + { + "name": "PDKEYR", + "offset": "0x04", + "fields": [ + [ + "PDKEYR", + 0, + 32, + "w" + ] + ] + }, + { + "name": "KEYR", + "offset": "0x08", + "fields": [ + [ + "KEYR", + 0, + 32, + "w" + ] + ] + }, + { + "name": "OPTKEYR", + "offset": "0x0C", + "fields": [ + [ + "OPTKEYR", + 0, + 32, + "w" + ] + ] + }, + { + "name": "SR", + "offset": "0x10", + "fields": [ + [ + "EOP", + 0, + 1 + ], + [ + "OPERR", + 1, + 1 + ], + [ + "PROGERR", + 3, + 1 + ], + [ + "WRPERR", + 4, + 1 + ], + [ + "PGAERR", + 5, + 1 + ], + [ + "SIZERR", + 6, + 1 + ], + [ + "PGSERR", + 7, + 1 + ], + [ + "MISSERR", + 8, + 1 + ], + [ + "FASTERR", + 9, + 1 + ], + [ + "RDERR", + 14, + 1 + ], + [ + "OPTVERR", + 15, + 1 + ], + [ + "BSY", + 16, + 1, + "r" + ] + ] + }, + { + "name": "CR", + "offset": "0x14", + "reset": "0xC0000000", + "fields": [ + [ + "PG", + 0, + 1 + ], + [ + "PER", + 1, + 1 + ], + [ + "MER1", + 2, + 1 + ], + [ + "PNB", + 3, + 7 + ], + [ + "BKER", + 11, + 1 + ], + [ + "MER2", + 15, + 1 + ], + [ + "START", + 16, + 1 + ], + [ + "OPTSTRT", + 17, + 1 + ], + [ + "FSTPG", + 18, + 1 + ], + [ + "EOPIE", + 24, + 1 + ], + [ + "ERRIE", + 25, + 1 + ], + [ + "RDERRIE", + 26, + 1 + ], + [ + "OBL_LAUNCH", + 27, + 1 + ], + [ + "SEC_PROT1", + 28, + 1 + ], + [ + "SEC_PROT2", + 29, + 1 + ], + [ + "OPTLOCK", + 30, + 1 + ], + [ + "LOCK", + 31, + 1 + ] + ] + }, + { + "name": "ECCR", + "offset": "0x18", + "fields": [ + [ + "ADDR_ECC", + 0, + 19, + "r" + ], + [ + "BK_ECC", + 21, + 1, + "r" + ], + [ + "SYSF_ECC", + 22, + 1, + "r" + ], + [ + "ECCCIE", + 24, + 1 + ], + [ + "ECCC2", + 28, + 1 + ], + [ + "ECCD2", + 29, + 1 + ], + [ + "ECCC", + 30, + 1 + ], + [ + "ECCD", + 31, + 1 + ] + ] + }, + { + "name": "OPTR", + "offset": "0x20", + "fields": [ + [ + "RDP", + 0, + 8 + ], + [ + "BOR_LEV", + 8, + 3 + ], + [ + "nRST_STOP", + 12, + 1 + ], + [ + "nRST_STDBY", + 13, + 1 + ], + [ + "nRST_SHDW", + 14, + 1 + ], + [ + "IWDG_SW", + 16, + 1 + ], + [ + "IWDG_STOP", + 17, + 1 + ], + [ + "IWGD_STDBY", + 18, + 1 + ], + [ + "WWDG_SW", + 19, + 1 + ], + [ + "BFB2", + 20, + 1 + ], + [ + "DBANK", + 22, + 1 + ], + [ + "nBOOT1", + 23, + 1 + ], + [ + "SRAM_PE", + 24, + 1 + ], + [ + "CCMSRAM_RST", + 25, + 1 + ], + [ + "nSWBOOT0", + 26, + 1 + ], + [ + "nBOOT0", + 27, + 1 + ], + [ + "NRST_MODE", + 28, + 2 + ], + [ + "IRHEN", + 30, + 1 + ] + ], + "reset": "0xFFEFF8AA" + }, + { + "name": "PCROP1SR", + "offset": "0x24", + "reset": "0xFFFF0000", + "fields": [ + [ + "PCROP1_STRT", + 0, + 15 + ] + ] + }, + { + "name": "PCROP1ER", + "offset": "0x28", + "fields": [ + [ + "PCROP1_END", + 0, + 15 + ], + [ + "PCROP_RDP", + 31, + 1 + ] + ] + }, + { + "name": "WRP1AR", + "offset": "0x2C", + "fields": [ + [ + "WRP1A_STRT", + 0, + 7 + ], + [ + "WRP1A_END", + 16, + 7 + ] + ] + }, + { + "name": "WRP1BR", + "offset": "0x30", + "fields": [ + [ + "WRP1B_STRT", + 0, + 7 + ], + [ + "WRP1B_END", + 16, + 7 + ] + ] + }, + { + "name": "PCROP2SR", + "offset": "0x44", + "reset": "0xFFFF0000", + "fields": [ + [ + "PCROP2_STRT", + 0, + 15 + ] + ] + }, + { + "name": "PCROP2ER", + "offset": "0x48", + "fields": [ + [ + "PCROP2_END", + 0, + 15 + ] + ] + }, + { + "name": "WRP2AR", + "offset": "0x4C", + "fields": [ + [ + "WRP2A_STRT", + 0, + 7 + ], + [ + "WRP2A_END", + 16, + 7 + ] + ] + }, + { + "name": "WRP2BR", + "offset": "0x50", + "fields": [ + [ + "WRP2B_STRT", + 0, + 7 + ], + [ + "WRP2B_END", + 16, + 7 + ] + ] + }, + { + "name": "SEC1R", + "offset": "0x70", + "reset": "0xFFF0FF00", + "fields": [ + [ + "SEC_SIZE1", + 0, + 8 + ], + [ + "BOOT_LOCK", + 16, + 1 + ] + ] + }, + { + "name": "SEC2R", + "offset": "0x74", + "reset": "0xFFFFFF00", + "fields": [ + [ + "SEC_SIZE2", + 0, + 8 + ] + ] + } + ] + }, + { + "name": "CRC", + "base": "0x40023000", + "registers": [ + { + "name": "DR", + "offset": "0x00", + "reset": "0xFFFFFFFF", + "fields": [ + [ + "DR", + 0, + 32 + ] + ] + }, + { + "name": "IDR", + "offset": "0x04", + "fields": [ + [ + "IDR", + 0, + 32 + ] + ] + }, + { + "name": "CR", + "offset": "0x08", + "fields": [ + [ + "REV_OUT", + 7, + 1 + ], + [ + "REV_IN", + 5, + 2 + ], + [ + "POLYSIZE", + 3, + 2 + ], + [ + "RESET", + 0, + 1, + "w" + ] + ] + }, + { + "name": "INIT", + "offset": "0x10", + "reset": "0xFFFFFFFF", + "fields": [ + [ + "CRC_INIT", + 0, + 32 + ] + ] + }, + { + "name": "POL", + "offset": "0x14", + "reset": "0x04C11DB7", + "fields": [ + [ + "POL", + 0, + 32 + ] + ] + } + ] + }, + { + "name": "GPIOA", + "base": "0x48000000", + "registers": [ + { + "name": "MODER", + "offset": "0x00", + "reset": "0xABFFFFFF", + "fields": [ + [ + "MODER15", + 30, + 2 + ], + [ + "MODER14", + 28, + 2 + ], + [ + "MODER13", + 26, + 2 + ], + [ + "MODER12", + 24, + 2 + ], + [ + "MODER11", + 22, + 2 + ], + [ + "MODER10", + 20, + 2 + ], + [ + "MODER9", + 18, + 2 + ], + [ + "MODER8", + 16, + 2 + ], + [ + "MODER7", + 14, + 2 + ], + [ + "MODER6", + 12, + 2 + ], + [ + "MODER5", + 10, + 2 + ], + [ + "MODER4", + 8, + 2 + ], + [ + "MODER3", + 6, + 2 + ], + [ + "MODER2", + 4, + 2 + ], + [ + "MODER1", + 2, + 2 + ], + [ + "MODER0", + 0, + 2 + ] + ] + }, + { + "name": "OTYPER", + "offset": "0x04", + "fields": [ + [ + "OT15", + 15, + 1 + ], + [ + "OT14", + 14, + 1 + ], + [ + "OT13", + 13, + 1 + ], + [ + "OT12", + 12, + 1 + ], + [ + "OT11", + 11, + 1 + ], + [ + "OT10", + 10, + 1 + ], + [ + "OT9", + 9, + 1 + ], + [ + "OT8", + 8, + 1 + ], + [ + "OT7", + 7, + 1 + ], + [ + "OT6", + 6, + 1 + ], + [ + "OT5", + 5, + 1 + ], + [ + "OT4", + 4, + 1 + ], + [ + "OT3", + 3, + 1 + ], + [ + "OT2", + 2, + 1 + ], + [ + "OT1", + 1, + 1 + ], + [ + "OT0", + 0, + 1 + ] + ] + }, + { + "name": "OSPEEDR", + "offset": "0x08", + "reset": "0x0C000000", + "fields": [ + [ + "OSPEEDR15", + 30, + 2 + ], + [ + "OSPEEDR14", + 28, + 2 + ], + [ + "OSPEEDR13", + 26, + 2 + ], + [ + "OSPEEDR12", + 24, + 2 + ], + [ + "OSPEEDR11", + 22, + 2 + ], + [ + "OSPEEDR10", + 20, + 2 + ], + [ + "OSPEEDR9", + 18, + 2 + ], + [ + "OSPEEDR8", + 16, + 2 + ], + [ + "OSPEEDR7", + 14, + 2 + ], + [ + "OSPEEDR6", + 12, + 2 + ], + [ + "OSPEEDR5", + 10, + 2 + ], + [ + "OSPEEDR4", + 8, + 2 + ], + [ + "OSPEEDR3", + 6, + 2 + ], + [ + "OSPEEDR2", + 4, + 2 + ], + [ + "OSPEEDR1", + 2, + 2 + ], + [ + "OSPEEDR0", + 0, + 2 + ] + ] + }, + { + "name": "PUPDR", + "offset": "0x0C", + "reset": "0x64000000", + "fields": [ + [ + "PUPDR15", + 30, + 2 + ], + [ + "PUPDR14", + 28, + 2 + ], + [ + "PUPDR13", + 26, + 2 + ], + [ + "PUPDR12", + 24, + 2 + ], + [ + "PUPDR11", + 22, + 2 + ], + [ + "PUPDR10", + 20, + 2 + ], + [ + "PUPDR9", + 18, + 2 + ], + [ + "PUPDR8", + 16, + 2 + ], + [ + "PUPDR7", + 14, + 2 + ], + [ + "PUPDR6", + 12, + 2 + ], + [ + "PUPDR5", + 10, + 2 + ], + [ + "PUPDR4", + 8, + 2 + ], + [ + "PUPDR3", + 6, + 2 + ], + [ + "PUPDR2", + 4, + 2 + ], + [ + "PUPDR1", + 2, + 2 + ], + [ + "PUPDR0", + 0, + 2 + ] + ] + }, + { + "name": "IDR", + "offset": "0x10", + "fields": [ + [ + "IDR15", + 15, + 1, + "r" + ], + [ + "IDR14", + 14, + 1, + "r" + ], + [ + "IDR13", + 13, + 1, + "r" + ], + [ + "IDR12", + 12, + 1, + "r" + ], + [ + "IDR11", + 11, + 1, + "r" + ], + [ + "IDR10", + 10, + 1, + "r" + ], + [ + "IDR9", + 9, + 1, + "r" + ], + [ + "IDR8", + 8, + 1, + "r" + ], + [ + "IDR7", + 7, + 1, + "r" + ], + [ + "IDR6", + 6, + 1, + "r" + ], + [ + "IDR5", + 5, + 1, + "r" + ], + [ + "IDR4", + 4, + 1, + "r" + ], + [ + "IDR3", + 3, + 1, + "r" + ], + [ + "IDR2", + 2, + 1, + "r" + ], + [ + "IDR1", + 1, + 1, + "r" + ], + [ + "IDR0", + 0, + 1, + "r" + ] + ] + }, + { + "name": "ODR", + "offset": "0x14", + "fields": [ + [ + "ODR15", + 15, + 1 + ], + [ + "ODR14", + 14, + 1 + ], + [ + "ODR13", + 13, + 1 + ], + [ + "ODR12", + 12, + 1 + ], + [ + "ODR11", + 11, + 1 + ], + [ + "ODR10", + 10, + 1 + ], + [ + "ODR9", + 9, + 1 + ], + [ + "ODR8", + 8, + 1 + ], + [ + "ODR7", + 7, + 1 + ], + [ + "ODR6", + 6, + 1 + ], + [ + "ODR5", + 5, + 1 + ], + [ + "ODR4", + 4, + 1 + ], + [ + "ODR3", + 3, + 1 + ], + [ + "ODR2", + 2, + 1 + ], + [ + "ODR1", + 1, + 1 + ], + [ + "ODR0", + 0, + 1 + ] + ] + }, + { + "name": "BSRR", + "offset": "0x18", + "fields": [ + [ + "BR15", + 31, + 1, + "w" + ], + [ + "BR14", + 30, + 1, + "w" + ], + [ + "BR13", + 29, + 1, + "w" + ], + [ + "BR12", + 28, + 1, + "w" + ], + [ + "BR11", + 27, + 1, + "w" + ], + [ + "BR10", + 26, + 1, + "w" + ], + [ + "BR9", + 25, + 1, + "w" + ], + [ + "BR8", + 24, + 1, + "w" + ], + [ + "BR7", + 23, + 1, + "w" + ], + [ + "BR6", + 22, + 1, + "w" + ], + [ + "BR5", + 21, + 1, + "w" + ], + [ + "BR4", + 20, + 1, + "w" + ], + [ + "BR3", + 19, + 1, + "w" + ], + [ + "BR2", + 18, + 1, + "w" + ], + [ + "BR1", + 17, + 1, + "w" + ], + [ + "BR0", + 16, + 1, + "w" + ], + [ + "BS15", + 15, + 1, + "w" + ], + [ + "BS14", + 14, + 1, + "w" + ], + [ + "BS13", + 13, + 1, + "w" + ], + [ + "BS12", + 12, + 1, + "w" + ], + [ + "BS11", + 11, + 1, + "w" + ], + [ + "BS10", + 10, + 1, + "w" + ], + [ + "BS9", + 9, + 1, + "w" + ], + [ + "BS8", + 8, + 1, + "w" + ], + [ + "BS7", + 7, + 1, + "w" + ], + [ + "BS6", + 6, + 1, + "w" + ], + [ + "BS5", + 5, + 1, + "w" + ], + [ + "BS4", + 4, + 1, + "w" + ], + [ + "BS3", + 3, + 1, + "w" + ], + [ + "BS2", + 2, + 1, + "w" + ], + [ + "BS1", + 1, + 1, + "w" + ], + [ + "BS0", + 0, + 1, + "w" + ] + ] + }, + { + "name": "LCKR", + "offset": "0x1C", + "fields": [ + [ + "LCKK", + 16, + 1 + ], + [ + "LCK15", + 15, + 1 + ], + [ + "LCK14", + 14, + 1 + ], + [ + "LCK13", + 13, + 1 + ], + [ + "LCK12", + 12, + 1 + ], + [ + "LCK11", + 11, + 1 + ], + [ + "LCK10", + 10, + 1 + ], + [ + "LCK9", + 9, + 1 + ], + [ + "LCK8", + 8, + 1 + ], + [ + "LCK7", + 7, + 1 + ], + [ + "LCK6", + 6, + 1 + ], + [ + "LCK5", + 5, + 1 + ], + [ + "LCK4", + 4, + 1 + ], + [ + "LCK3", + 3, + 1 + ], + [ + "LCK2", + 2, + 1 + ], + [ + "LCK1", + 1, + 1 + ], + [ + "LCK0", + 0, + 1 + ] + ] + }, + { + "name": "AFRL", + "offset": "0x20", + "fields": [ + [ + "AFRL7", + 28, + 4 + ], + [ + "AFRL6", + 24, + 4 + ], + [ + "AFRL5", + 20, + 4 + ], + [ + "AFRL4", + 16, + 4 + ], + [ + "AFRL3", + 12, + 4 + ], + [ + "AFRL2", + 8, + 4 + ], + [ + "AFRL1", + 4, + 4 + ], + [ + "AFRL0", + 0, + 4 + ] + ] + }, + { + "name": "AFRH", + "offset": "0x24", + "fields": [ + [ + "AFRH15", + 28, + 4 + ], + [ + "AFRH14", + 24, + 4 + ], + [ + "AFRH13", + 20, + 4 + ], + [ + "AFRH12", + 16, + 4 + ], + [ + "AFRH11", + 12, + 4 + ], + [ + "AFRH10", + 8, + 4 + ], + [ + "AFRH9", + 4, + 4 + ], + [ + "AFRH8", + 0, + 4 + ] + ] + }, + { + "name": "BRR", + "offset": "0x28", + "fields": [ + [ + "BR0", + 0, + 1, + "w" + ], + [ + "BR1", + 1, + 1, + "w" + ], + [ + "BR2", + 2, + 1, + "w" + ], + [ + "BR3", + 3, + 1, + "w" + ], + [ + "BR4", + 4, + 1, + "w" + ], + [ + "BR5", + 5, + 1, + "w" + ], + [ + "BR6", + 6, + 1, + "w" + ], + [ + "BR7", + 7, + 1, + "w" + ], + [ + "BR8", + 8, + 1, + "w" + ], + [ + "BR9", + 9, + 1, + "w" + ], + [ + "BR10", + 10, + 1, + "w" + ], + [ + "BR11", + 11, + 1, + "w" + ], + [ + "BR12", + 12, + 1, + "w" + ], + [ + "BR13", + 13, + 1, + "w" + ], + [ + "BR14", + 14, + 1, + "w" + ], + [ + "BR15", + 15, + 1, + "w" + ] + ] + } + ] + }, + { + "name": "GPIOB", + "base": "0x48000400", + "registers": [ + { + "name": "MODER", + "offset": "0x00", + "reset": "0xFFFFFEBF", + "fields": [ + [ + "MODER15", + 30, + 2 + ], + [ + "MODER14", + 28, + 2 + ], + [ + "MODER13", + 26, + 2 + ], + [ + "MODER12", + 24, + 2 + ], + [ + "MODER11", + 22, + 2 + ], + [ + "MODER10", + 20, + 2 + ], + [ + "MODER9", + 18, + 2 + ], + [ + "MODER8", + 16, + 2 + ], + [ + "MODER7", + 14, + 2 + ], + [ + "MODER6", + 12, + 2 + ], + [ + "MODER5", + 10, + 2 + ], + [ + "MODER4", + 8, + 2 + ], + [ + "MODER3", + 6, + 2 + ], + [ + "MODER2", + 4, + 2 + ], + [ + "MODER1", + 2, + 2 + ], + [ + "MODER0", + 0, + 2 + ] + ] + }, + { + "name": "OTYPER", + "offset": "0x04", + "fields": [ + [ + "OT15", + 15, + 1 + ], + [ + "OT14", + 14, + 1 + ], + [ + "OT13", + 13, + 1 + ], + [ + "OT12", + 12, + 1 + ], + [ + "OT11", + 11, + 1 + ], + [ + "OT10", + 10, + 1 + ], + [ + "OT9", + 9, + 1 + ], + [ + "OT8", + 8, + 1 + ], + [ + "OT7", + 7, + 1 + ], + [ + "OT6", + 6, + 1 + ], + [ + "OT5", + 5, + 1 + ], + [ + "OT4", + 4, + 1 + ], + [ + "OT3", + 3, + 1 + ], + [ + "OT2", + 2, + 1 + ], + [ + "OT1", + 1, + 1 + ], + [ + "OT0", + 0, + 1 + ] + ] + }, + { + "name": "OSPEEDR", + "offset": "0x08", + "reset": "0x000000C0", + "fields": [ + [ + "OSPEEDR15", + 30, + 2 + ], + [ + "OSPEEDR14", + 28, + 2 + ], + [ + "OSPEEDR13", + 26, + 2 + ], + [ + "OSPEEDR12", + 24, + 2 + ], + [ + "OSPEEDR11", + 22, + 2 + ], + [ + "OSPEEDR10", + 20, + 2 + ], + [ + "OSPEEDR9", + 18, + 2 + ], + [ + "OSPEEDR8", + 16, + 2 + ], + [ + "OSPEEDR7", + 14, + 2 + ], + [ + "OSPEEDR6", + 12, + 2 + ], + [ + "OSPEEDR5", + 10, + 2 + ], + [ + "OSPEEDR4", + 8, + 2 + ], + [ + "OSPEEDR3", + 6, + 2 + ], + [ + "OSPEEDR2", + 4, + 2 + ], + [ + "OSPEEDR1", + 2, + 2 + ], + [ + "OSPEEDR0", + 0, + 2 + ] + ] + }, + { + "name": "PUPDR", + "offset": "0x0C", + "reset": "0x00000100", + "fields": [ + [ + "PUPDR15", + 30, + 2 + ], + [ + "PUPDR14", + 28, + 2 + ], + [ + "PUPDR13", + 26, + 2 + ], + [ + "PUPDR12", + 24, + 2 + ], + [ + "PUPDR11", + 22, + 2 + ], + [ + "PUPDR10", + 20, + 2 + ], + [ + "PUPDR9", + 18, + 2 + ], + [ + "PUPDR8", + 16, + 2 + ], + [ + "PUPDR7", + 14, + 2 + ], + [ + "PUPDR6", + 12, + 2 + ], + [ + "PUPDR5", + 10, + 2 + ], + [ + "PUPDR4", + 8, + 2 + ], + [ + "PUPDR3", + 6, + 2 + ], + [ + "PUPDR2", + 4, + 2 + ], + [ + "PUPDR1", + 2, + 2 + ], + [ + "PUPDR0", + 0, + 2 + ] + ] + }, + { + "name": "IDR", + "offset": "0x10", + "fields": [ + [ + "IDR15", + 15, + 1, + "r" + ], + [ + "IDR14", + 14, + 1, + "r" + ], + [ + "IDR13", + 13, + 1, + "r" + ], + [ + "IDR12", + 12, + 1, + "r" + ], + [ + "IDR11", + 11, + 1, + "r" + ], + [ + "IDR10", + 10, + 1, + "r" + ], + [ + "IDR9", + 9, + 1, + "r" + ], + [ + "IDR8", + 8, + 1, + "r" + ], + [ + "IDR7", + 7, + 1, + "r" + ], + [ + "IDR6", + 6, + 1, + "r" + ], + [ + "IDR5", + 5, + 1, + "r" + ], + [ + "IDR4", + 4, + 1, + "r" + ], + [ + "IDR3", + 3, + 1, + "r" + ], + [ + "IDR2", + 2, + 1, + "r" + ], + [ + "IDR1", + 1, + 1, + "r" + ], + [ + "IDR0", + 0, + 1, + "r" + ] + ] + }, + { + "name": "ODR", + "offset": "0x14", + "fields": [ + [ + "ODR15", + 15, + 1 + ], + [ + "ODR14", + 14, + 1 + ], + [ + "ODR13", + 13, + 1 + ], + [ + "ODR12", + 12, + 1 + ], + [ + "ODR11", + 11, + 1 + ], + [ + "ODR10", + 10, + 1 + ], + [ + "ODR9", + 9, + 1 + ], + [ + "ODR8", + 8, + 1 + ], + [ + "ODR7", + 7, + 1 + ], + [ + "ODR6", + 6, + 1 + ], + [ + "ODR5", + 5, + 1 + ], + [ + "ODR4", + 4, + 1 + ], + [ + "ODR3", + 3, + 1 + ], + [ + "ODR2", + 2, + 1 + ], + [ + "ODR1", + 1, + 1 + ], + [ + "ODR0", + 0, + 1 + ] + ] + }, + { + "name": "BSRR", + "offset": "0x18", + "fields": [ + [ + "BR15", + 31, + 1, + "w" + ], + [ + "BR14", + 30, + 1, + "w" + ], + [ + "BR13", + 29, + 1, + "w" + ], + [ + "BR12", + 28, + 1, + "w" + ], + [ + "BR11", + 27, + 1, + "w" + ], + [ + "BR10", + 26, + 1, + "w" + ], + [ + "BR9", + 25, + 1, + "w" + ], + [ + "BR8", + 24, + 1, + "w" + ], + [ + "BR7", + 23, + 1, + "w" + ], + [ + "BR6", + 22, + 1, + "w" + ], + [ + "BR5", + 21, + 1, + "w" + ], + [ + "BR4", + 20, + 1, + "w" + ], + [ + "BR3", + 19, + 1, + "w" + ], + [ + "BR2", + 18, + 1, + "w" + ], + [ + "BR1", + 17, + 1, + "w" + ], + [ + "BR0", + 16, + 1, + "w" + ], + [ + "BS15", + 15, + 1, + "w" + ], + [ + "BS14", + 14, + 1, + "w" + ], + [ + "BS13", + 13, + 1, + "w" + ], + [ + "BS12", + 12, + 1, + "w" + ], + [ + "BS11", + 11, + 1, + "w" + ], + [ + "BS10", + 10, + 1, + "w" + ], + [ + "BS9", + 9, + 1, + "w" + ], + [ + "BS8", + 8, + 1, + "w" + ], + [ + "BS7", + 7, + 1, + "w" + ], + [ + "BS6", + 6, + 1, + "w" + ], + [ + "BS5", + 5, + 1, + "w" + ], + [ + "BS4", + 4, + 1, + "w" + ], + [ + "BS3", + 3, + 1, + "w" + ], + [ + "BS2", + 2, + 1, + "w" + ], + [ + "BS1", + 1, + 1, + "w" + ], + [ + "BS0", + 0, + 1, + "w" + ] + ] + }, + { + "name": "LCKR", + "offset": "0x1C", + "fields": [ + [ + "LCKK", + 16, + 1 + ], + [ + "LCK15", + 15, + 1 + ], + [ + "LCK14", + 14, + 1 + ], + [ + "LCK13", + 13, + 1 + ], + [ + "LCK12", + 12, + 1 + ], + [ + "LCK11", + 11, + 1 + ], + [ + "LCK10", + 10, + 1 + ], + [ + "LCK9", + 9, + 1 + ], + [ + "LCK8", + 8, + 1 + ], + [ + "LCK7", + 7, + 1 + ], + [ + "LCK6", + 6, + 1 + ], + [ + "LCK5", + 5, + 1 + ], + [ + "LCK4", + 4, + 1 + ], + [ + "LCK3", + 3, + 1 + ], + [ + "LCK2", + 2, + 1 + ], + [ + "LCK1", + 1, + 1 + ], + [ + "LCK0", + 0, + 1 + ] + ] + }, + { + "name": "AFRL", + "offset": "0x20", + "fields": [ + [ + "AFRL7", + 28, + 4 + ], + [ + "AFRL6", + 24, + 4 + ], + [ + "AFRL5", + 20, + 4 + ], + [ + "AFRL4", + 16, + 4 + ], + [ + "AFRL3", + 12, + 4 + ], + [ + "AFRL2", + 8, + 4 + ], + [ + "AFRL1", + 4, + 4 + ], + [ + "AFRL0", + 0, + 4 + ] + ] + }, + { + "name": "AFRH", + "offset": "0x24", + "fields": [ + [ + "AFRH15", + 28, + 4 + ], + [ + "AFRH14", + 24, + 4 + ], + [ + "AFRH13", + 20, + 4 + ], + [ + "AFRH12", + 16, + 4 + ], + [ + "AFRH11", + 12, + 4 + ], + [ + "AFRH10", + 8, + 4 + ], + [ + "AFRH9", + 4, + 4 + ], + [ + "AFRH8", + 0, + 4 + ] + ] + }, + { + "name": "BRR", + "offset": "0x28", + "fields": [ + [ + "BR0", + 0, + 1, + "w" + ], + [ + "BR1", + 1, + 1, + "w" + ], + [ + "BR2", + 2, + 1, + "w" + ], + [ + "BR3", + 3, + 1, + "w" + ], + [ + "BR4", + 4, + 1, + "w" + ], + [ + "BR5", + 5, + 1, + "w" + ], + [ + "BR6", + 6, + 1, + "w" + ], + [ + "BR7", + 7, + 1, + "w" + ], + [ + "BR8", + 8, + 1, + "w" + ], + [ + "BR9", + 9, + 1, + "w" + ], + [ + "BR10", + 10, + 1, + "w" + ], + [ + "BR11", + 11, + 1, + "w" + ], + [ + "BR12", + 12, + 1, + "w" + ], + [ + "BR13", + 13, + 1, + "w" + ], + [ + "BR14", + 14, + 1, + "w" + ], + [ + "BR15", + 15, + 1, + "w" + ] + ] + } + ] + }, + { + "name": "GPIOC", + "base": "0x48000800", + "registers": [ + { + "name": "MODER", + "offset": "0x00", + "reset": "0xFFFFFFFF", + "fields": [ + [ + "MODER15", + 30, + 2 + ], + [ + "MODER14", + 28, + 2 + ], + [ + "MODER13", + 26, + 2 + ], + [ + "MODER12", + 24, + 2 + ], + [ + "MODER11", + 22, + 2 + ], + [ + "MODER10", + 20, + 2 + ], + [ + "MODER9", + 18, + 2 + ], + [ + "MODER8", + 16, + 2 + ], + [ + "MODER7", + 14, + 2 + ], + [ + "MODER6", + 12, + 2 + ], + [ + "MODER5", + 10, + 2 + ], + [ + "MODER4", + 8, + 2 + ], + [ + "MODER3", + 6, + 2 + ], + [ + "MODER2", + 4, + 2 + ], + [ + "MODER1", + 2, + 2 + ], + [ + "MODER0", + 0, + 2 + ] + ] + }, + { + "name": "OTYPER", + "offset": "0x04", + "fields": [ + [ + "OT15", + 15, + 1 + ], + [ + "OT14", + 14, + 1 + ], + [ + "OT13", + 13, + 1 + ], + [ + "OT12", + 12, + 1 + ], + [ + "OT11", + 11, + 1 + ], + [ + "OT10", + 10, + 1 + ], + [ + "OT9", + 9, + 1 + ], + [ + "OT8", + 8, + 1 + ], + [ + "OT7", + 7, + 1 + ], + [ + "OT6", + 6, + 1 + ], + [ + "OT5", + 5, + 1 + ], + [ + "OT4", + 4, + 1 + ], + [ + "OT3", + 3, + 1 + ], + [ + "OT2", + 2, + 1 + ], + [ + "OT1", + 1, + 1 + ], + [ + "OT0", + 0, + 1 + ] + ] + }, + { + "name": "OSPEEDR", + "offset": "0x08", + "fields": [ + [ + "OSPEEDR15", + 30, + 2 + ], + [ + "OSPEEDR14", + 28, + 2 + ], + [ + "OSPEEDR13", + 26, + 2 + ], + [ + "OSPEEDR12", + 24, + 2 + ], + [ + "OSPEEDR11", + 22, + 2 + ], + [ + "OSPEEDR10", + 20, + 2 + ], + [ + "OSPEEDR9", + 18, + 2 + ], + [ + "OSPEEDR8", + 16, + 2 + ], + [ + "OSPEEDR7", + 14, + 2 + ], + [ + "OSPEEDR6", + 12, + 2 + ], + [ + "OSPEEDR5", + 10, + 2 + ], + [ + "OSPEEDR4", + 8, + 2 + ], + [ + "OSPEEDR3", + 6, + 2 + ], + [ + "OSPEEDR2", + 4, + 2 + ], + [ + "OSPEEDR1", + 2, + 2 + ], + [ + "OSPEEDR0", + 0, + 2 + ] + ] + }, + { + "name": "PUPDR", + "offset": "0x0C", + "fields": [ + [ + "PUPDR15", + 30, + 2 + ], + [ + "PUPDR14", + 28, + 2 + ], + [ + "PUPDR13", + 26, + 2 + ], + [ + "PUPDR12", + 24, + 2 + ], + [ + "PUPDR11", + 22, + 2 + ], + [ + "PUPDR10", + 20, + 2 + ], + [ + "PUPDR9", + 18, + 2 + ], + [ + "PUPDR8", + 16, + 2 + ], + [ + "PUPDR7", + 14, + 2 + ], + [ + "PUPDR6", + 12, + 2 + ], + [ + "PUPDR5", + 10, + 2 + ], + [ + "PUPDR4", + 8, + 2 + ], + [ + "PUPDR3", + 6, + 2 + ], + [ + "PUPDR2", + 4, + 2 + ], + [ + "PUPDR1", + 2, + 2 + ], + [ + "PUPDR0", + 0, + 2 + ] + ] + }, + { + "name": "IDR", + "offset": "0x10", + "fields": [ + [ + "IDR15", + 15, + 1, + "r" + ], + [ + "IDR14", + 14, + 1, + "r" + ], + [ + "IDR13", + 13, + 1, + "r" + ], + [ + "IDR12", + 12, + 1, + "r" + ], + [ + "IDR11", + 11, + 1, + "r" + ], + [ + "IDR10", + 10, + 1, + "r" + ], + [ + "IDR9", + 9, + 1, + "r" + ], + [ + "IDR8", + 8, + 1, + "r" + ], + [ + "IDR7", + 7, + 1, + "r" + ], + [ + "IDR6", + 6, + 1, + "r" + ], + [ + "IDR5", + 5, + 1, + "r" + ], + [ + "IDR4", + 4, + 1, + "r" + ], + [ + "IDR3", + 3, + 1, + "r" + ], + [ + "IDR2", + 2, + 1, + "r" + ], + [ + "IDR1", + 1, + 1, + "r" + ], + [ + "IDR0", + 0, + 1, + "r" + ] + ] + }, + { + "name": "ODR", + "offset": "0x14", + "fields": [ + [ + "ODR15", + 15, + 1 + ], + [ + "ODR14", + 14, + 1 + ], + [ + "ODR13", + 13, + 1 + ], + [ + "ODR12", + 12, + 1 + ], + [ + "ODR11", + 11, + 1 + ], + [ + "ODR10", + 10, + 1 + ], + [ + "ODR9", + 9, + 1 + ], + [ + "ODR8", + 8, + 1 + ], + [ + "ODR7", + 7, + 1 + ], + [ + "ODR6", + 6, + 1 + ], + [ + "ODR5", + 5, + 1 + ], + [ + "ODR4", + 4, + 1 + ], + [ + "ODR3", + 3, + 1 + ], + [ + "ODR2", + 2, + 1 + ], + [ + "ODR1", + 1, + 1 + ], + [ + "ODR0", + 0, + 1 + ] + ] + }, + { + "name": "BSRR", + "offset": "0x18", + "fields": [ + [ + "BR15", + 31, + 1, + "w" + ], + [ + "BR14", + 30, + 1, + "w" + ], + [ + "BR13", + 29, + 1, + "w" + ], + [ + "BR12", + 28, + 1, + "w" + ], + [ + "BR11", + 27, + 1, + "w" + ], + [ + "BR10", + 26, + 1, + "w" + ], + [ + "BR9", + 25, + 1, + "w" + ], + [ + "BR8", + 24, + 1, + "w" + ], + [ + "BR7", + 23, + 1, + "w" + ], + [ + "BR6", + 22, + 1, + "w" + ], + [ + "BR5", + 21, + 1, + "w" + ], + [ + "BR4", + 20, + 1, + "w" + ], + [ + "BR3", + 19, + 1, + "w" + ], + [ + "BR2", + 18, + 1, + "w" + ], + [ + "BR1", + 17, + 1, + "w" + ], + [ + "BR0", + 16, + 1, + "w" + ], + [ + "BS15", + 15, + 1, + "w" + ], + [ + "BS14", + 14, + 1, + "w" + ], + [ + "BS13", + 13, + 1, + "w" + ], + [ + "BS12", + 12, + 1, + "w" + ], + [ + "BS11", + 11, + 1, + "w" + ], + [ + "BS10", + 10, + 1, + "w" + ], + [ + "BS9", + 9, + 1, + "w" + ], + [ + "BS8", + 8, + 1, + "w" + ], + [ + "BS7", + 7, + 1, + "w" + ], + [ + "BS6", + 6, + 1, + "w" + ], + [ + "BS5", + 5, + 1, + "w" + ], + [ + "BS4", + 4, + 1, + "w" + ], + [ + "BS3", + 3, + 1, + "w" + ], + [ + "BS2", + 2, + 1, + "w" + ], + [ + "BS1", + 1, + 1, + "w" + ], + [ + "BS0", + 0, + 1, + "w" + ] + ] + }, + { + "name": "LCKR", + "offset": "0x1C", + "fields": [ + [ + "LCKK", + 16, + 1 + ], + [ + "LCK15", + 15, + 1 + ], + [ + "LCK14", + 14, + 1 + ], + [ + "LCK13", + 13, + 1 + ], + [ + "LCK12", + 12, + 1 + ], + [ + "LCK11", + 11, + 1 + ], + [ + "LCK10", + 10, + 1 + ], + [ + "LCK9", + 9, + 1 + ], + [ + "LCK8", + 8, + 1 + ], + [ + "LCK7", + 7, + 1 + ], + [ + "LCK6", + 6, + 1 + ], + [ + "LCK5", + 5, + 1 + ], + [ + "LCK4", + 4, + 1 + ], + [ + "LCK3", + 3, + 1 + ], + [ + "LCK2", + 2, + 1 + ], + [ + "LCK1", + 1, + 1 + ], + [ + "LCK0", + 0, + 1 + ] + ] + }, + { + "name": "AFRL", + "offset": "0x20", + "fields": [ + [ + "AFRL7", + 28, + 4 + ], + [ + "AFRL6", + 24, + 4 + ], + [ + "AFRL5", + 20, + 4 + ], + [ + "AFRL4", + 16, + 4 + ], + [ + "AFRL3", + 12, + 4 + ], + [ + "AFRL2", + 8, + 4 + ], + [ + "AFRL1", + 4, + 4 + ], + [ + "AFRL0", + 0, + 4 + ] + ] + }, + { + "name": "AFRH", + "offset": "0x24", + "fields": [ + [ + "AFRH15", + 28, + 4 + ], + [ + "AFRH14", + 24, + 4 + ], + [ + "AFRH13", + 20, + 4 + ], + [ + "AFRH12", + 16, + 4 + ], + [ + "AFRH11", + 12, + 4 + ], + [ + "AFRH10", + 8, + 4 + ], + [ + "AFRH9", + 4, + 4 + ], + [ + "AFRH8", + 0, + 4 + ] + ] + }, + { + "name": "BRR", + "offset": "0x28", + "fields": [ + [ + "BR0", + 0, + 1, + "w" + ], + [ + "BR1", + 1, + 1, + "w" + ], + [ + "BR2", + 2, + 1, + "w" + ], + [ + "BR3", + 3, + 1, + "w" + ], + [ + "BR4", + 4, + 1, + "w" + ], + [ + "BR5", + 5, + 1, + "w" + ], + [ + "BR6", + 6, + 1, + "w" + ], + [ + "BR7", + 7, + 1, + "w" + ], + [ + "BR8", + 8, + 1, + "w" + ], + [ + "BR9", + 9, + 1, + "w" + ], + [ + "BR10", + 10, + 1, + "w" + ], + [ + "BR11", + 11, + 1, + "w" + ], + [ + "BR12", + 12, + 1, + "w" + ], + [ + "BR13", + 13, + 1, + "w" + ], + [ + "BR14", + 14, + 1, + "w" + ], + [ + "BR15", + 15, + 1, + "w" + ] + ] + } + ] + }, + { + "name": "GPIOD", + "base": "0x48000C00", + "derived_from": "GPIOC" + }, + { + "name": "GPIOE", + "base": "0x48001000", + "derived_from": "GPIOC" + }, + { + "name": "GPIOF", + "base": "0x48001400", + "derived_from": "GPIOC" + }, + { + "name": "GPIOG", + "base": "0x48001800", + "derived_from": "GPIOC" + }, + { + "name": "ADC1", + "base": "0x50000000", + "interrupts": [ + "ADC1_2" + ], + "registers": [ + { + "name": "ISR", + "offset": "0x00", + "fields": [ + [ + "JQOVF", + 10, + 1 + ], + [ + "AWD3", + 9, + 1 + ], + [ + "AWD2", + 8, + 1 + ], + [ + "AWD1", + 7, + 1 + ], + [ + "JEOS", + 6, + 1 + ], + [ + "JEOC", + 5, + 1 + ], + [ + "OVR", + 4, + 1 + ], + [ + "EOS", + 3, + 1 + ], + [ + "EOC", + 2, + 1 + ], + [ + "EOSMP", + 1, + 1 + ], + [ + "ADRDY", + 0, + 1 + ] + ] + }, + { + "name": "IER", + "offset": "0x04", + "fields": [ + [ + "JQOVFIE", + 10, + 1 + ], + [ + "AWD3IE", + 9, + 1 + ], + [ + "AWD2IE", + 8, + 1 + ], + [ + "AWD1IE", + 7, + 1 + ], + [ + "JEOSIE", + 6, + 1 + ], + [ + "JEOCIE", + 5, + 1 + ], + [ + "OVRIE", + 4, + 1 + ], + [ + "EOSIE", + 3, + 1 + ], + [ + "EOCIE", + 2, + 1 + ], + [ + "EOSMPIE", + 1, + 1 + ], + [ + "ADRDYIE", + 0, + 1 + ] + ] + }, + { + "name": "CR", + "offset": "0x08", + "reset": "0x20000000", + "fields": [ + [ + "ADCAL", + 31, + 1 + ], + [ + "ADCALDIF", + 30, + 1 + ], + [ + "DEEPPWD", + 29, + 1 + ], + [ + "ADVREGEN", + 28, + 1 + ], + [ + "JADSTP", + 5, + 1 + ], + [ + "ADSTP", + 4, + 1 + ], + [ + "JADSTART", + 3, + 1 + ], + [ + "ADSTART", + 2, + 1 + ], + [ + "ADDIS", + 1, + 1 + ], + [ + "ADEN", + 0, + 1 + ] + ] + }, + { + "name": "CFGR", + "offset": "0x0C", + "reset": "0x80000000", + "fields": [ + [ + "JQDIS", + 31, + 1 + ], + [ + "AWD1CH", + 26, + 5 + ], + [ + "JAUTO", + 25, + 1 + ], + [ + "JAWD1EN", + 24, + 1 + ], + [ + "AWD1EN", + 23, + 1 + ], + [ + "AWD1SGL", + 22, + 1 + ], + [ + "JQM", + 21, + 1 + ], + [ + "JDISCEN", + 20, + 1 + ], + [ + "DISCNUM", + 17, + 3 + ], + [ + "DISCEN", + 16, + 1 + ], + [ + "ALIGN", + 15, + 1 + ], + [ + "AUTDLY", + 14, + 1 + ], + [ + "CONT", + 13, + 1 + ], + [ + "OVRMOD", + 12, + 1 + ], + [ + "EXTEN", + 10, + 2 + ], + [ + "EXTSEL", + 5, + 5 + ], + [ + "RES", + 3, + 2 + ], + [ + "DMACFG", + 1, + 1 + ], + [ + "DMAEN", + 0, + 1 + ] + ] + }, + { + "name": "CFGR2", + "offset": "0x10", + "fields": [ + [ + "SMPTRIG", + 27, + 1 + ], + [ + "BULB", + 26, + 1 + ], + [ + "SWTRIG", + 25, + 1 + ], + [ + "GCOMP", + 16, + 1 + ], + [ + "ROVSM", + 10, + 1 + ], + [ + "TROVS", + 9, + 1 + ], + [ + "OVSS", + 5, + 4 + ], + [ + "OVSR", + 2, + 3 + ], + [ + "JOVSE", + 1, + 1 + ], + [ + "ROVSE", + 0, + 1 + ] + ] + }, + { + "name": "SMPR1", + "offset": "0x14", + "fields": [ + [ + "SMP9", + 27, + 3 + ], + [ + "SMP8", + 24, + 3 + ], + [ + "SMP7", + 21, + 3 + ], + [ + "SMP6", + 18, + 3 + ], + [ + "SMP5", + 15, + 3 + ], + [ + "SMP4", + 12, + 3 + ], + [ + "SMP3", + 9, + 3 + ], + [ + "SMP2", + 6, + 3 + ], + [ + "SMP1", + 3, + 3 + ], + [ + "SMPPLUS", + 31, + 1 + ], + [ + "SMP0", + 0, + 3 + ] + ] + }, + { + "name": "SMPR2", + "offset": "0x18", + "fields": [ + [ + "SMP18", + 24, + 3 + ], + [ + "SMP17", + 21, + 3 + ], + [ + "SMP16", + 18, + 3 + ], + [ + "SMP15", + 15, + 3 + ], + [ + "SMP14", + 12, + 3 + ], + [ + "SMP13", + 9, + 3 + ], + [ + "SMP12", + 6, + 3 + ], + [ + "SMP11", + 3, + 3 + ], + [ + "SMP10", + 0, + 3 + ] + ] + }, + { + "name": "TR1", + "offset": "0x20", + "reset": "0x0FFF0000", + "fields": [ + [ + "HT1", + 16, + 12 + ], + [ + "AWDFILT", + 12, + 3 + ], + [ + "LT1", + 0, + 12 + ] + ] + }, + { + "name": "TR2", + "offset": "0x24", + "reset": "0x00FF0000", + "fields": [ + [ + "HT2", + 16, + 8 + ], + [ + "LT2", + 0, + 8 + ] + ] + }, + { + "name": "TR3", + "offset": "0x28", + "reset": "0x00FF0000", + "fields": [ + [ + "HT3", + 16, + 8 + ], + [ + "LT3", + 0, + 8 + ] + ] + }, + { + "name": "SQR1", + "offset": "0x30", + "fields": [ + [ + "SQ4", + 24, + 5 + ], + [ + "SQ3", + 18, + 5 + ], + [ + "SQ2", + 12, + 5 + ], + [ + "SQ1", + 6, + 5 + ], + [ + "L", + 0, + 4 + ] + ] + }, + { + "name": "SQR2", + "offset": "0x34", + "fields": [ + [ + "SQ9", + 24, + 5 + ], + [ + "SQ8", + 18, + 5 + ], + [ + "SQ7", + 12, + 5 + ], + [ + "SQ6", + 6, + 5 + ], + [ + "SQ5", + 0, + 5 + ] + ] + }, + { + "name": "SQR3", + "offset": "0x38", + "fields": [ + [ + "SQ14", + 24, + 5 + ], + [ + "SQ13", + 18, + 5 + ], + [ + "SQ12", + 12, + 5 + ], + [ + "SQ11", + 6, + 5 + ], + [ + "SQ10", + 0, + 5 + ] + ] + }, + { + "name": "SQR4", + "offset": "0x3C", + "fields": [ + [ + "SQ16", + 6, + 5 + ], + [ + "SQ15", + 0, + 5 + ] + ] + }, + { + "name": "DR", + "offset": "0x40", + "fields": [ + [ + "RDATA", + 0, + 16, + "r" + ] + ] + }, + { + "name": "JSQR", + "offset": "0x4C", + "fields": [ + [ + "JSQ4", + 27, + 5 + ], + [ + "JSQ3", + 21, + 5 + ], + [ + "JSQ2", + 15, + 5 + ], + [ + "JSQ1", + 9, + 5 + ], + [ + "JEXTEN", + 7, + 2 + ], + [ + "JEXTSEL", + 2, + 5 + ], + [ + "JL", + 0, + 2 + ] + ] + }, + { + "name": "OFR1", + "offset": "0x60", + "fields": [ + [ + "OFFSET1_EN", + 31, + 1 + ], + [ + "OFFSET1_CH", + 26, + 5 + ], + [ + "SATEN", + 25, + 1 + ], + [ + "OFFSETPOS", + 24, + 1 + ], + [ + "OFFSET1", + 0, + 12 + ] + ] + }, + { + "name": "OFR2", + "offset": "0x64", + "fields": [ + [ + "OFFSET1_EN", + 31, + 1 + ], + [ + "OFFSET1_CH", + 26, + 5 + ], + [ + "SATEN", + 25, + 1 + ], + [ + "OFFSETPOS", + 24, + 1 + ], + [ + "OFFSET1", + 0, + 12 + ] + ] + }, + { + "name": "OFR3", + "offset": "0x68", + "fields": [ + [ + "OFFSET1_EN", + 31, + 1 + ], + [ + "OFFSET1_CH", + 26, + 5 + ], + [ + "SATEN", + 25, + 1 + ], + [ + "OFFSETPOS", + 24, + 1 + ], + [ + "OFFSET1", + 0, + 12 + ] + ] + }, + { + "name": "OFR4", + "offset": "0x6C", + "fields": [ + [ + "OFFSET1_EN", + 31, + 1 + ], + [ + "OFFSET1_CH", + 26, + 5 + ], + [ + "SATEN", + 25, + 1 + ], + [ + "OFFSETPOS", + 24, + 1 + ], + [ + "OFFSET1", + 0, + 12 + ] + ] + }, + { + "name": "JDR1", + "offset": "0x80", + "fields": [ + [ + "JDATA1", + 0, + 16, + "r" + ] + ] + }, + { + "name": "JDR2", + "offset": "0x84", + "fields": [ + [ + "JDATA2", + 0, + 16, + "r" + ] + ] + }, + { + "name": "JDR3", + "offset": "0x88", + "fields": [ + [ + "JDATA3", + 0, + 16, + "r" + ] + ] + }, + { + "name": "JDR4", + "offset": "0x8C", + "fields": [ + [ + "JDATA4", + 0, + 16, + "r" + ] + ] + }, + { + "name": "AWD2CR", + "offset": "0xA0", + "fields": [ + [ + "AWD2CH", + 0, + 19 + ] + ] + }, + { + "name": "AWD3CR", + "offset": "0xA4", + "fields": [ + [ + "AWD3CH", + 0, + 19 + ] + ] + }, + { + "name": "DIFSEL", + "offset": "0xB0", + "fields": [ + [ + "DIFSEL_0", + 0, + 1, + "r" + ], + [ + "DIFSEL_1_18", + 1, + 18 + ] + ] + }, + { + "name": "CALFACT", + "offset": "0xB4", + "fields": [ + [ + "CALFACT_D", + 16, + 7 + ], + [ + "CALFACT_S", + 0, + 7 + ] + ] + }, + { + "name": "GCOMP", + "offset": "0xC0", + "fields": [ + [ + "GCOMPCOEFF", + 0, + 14 + ] + ] + } + ] + }, + { + "name": "ADC2", + "base": "0x50000100", + "derived_from": "ADC1", + "interrupts": [ + "ADC1_2" + ] + }, + { + "name": "ADC12_Common", + "base": "0x50000300", + "registers": [ + { + "name": "CSR", + "offset": "0x00", + "fields": [ + [ + "ADDRDY_MST", + 0, + 1, + "r" + ], + [ + "EOSMP_MST", + 1, + 1, + "r" + ], + [ + "EOC_MST", + 2, + 1, + "r" + ], + [ + "EOS_MST", + 3, + 1, + "r" + ], + [ + "OVR_MST", + 4, + 1, + "r" + ], + [ + "JEOC_MST", + 5, + 1, + "r" + ], + [ + "JEOS_MST", + 6, + 1, + "r" + ], + [ + "AWD1_MST", + 7, + 1, + "r" + ], + [ + "AWD2_MST", + 8, + 1, + "r" + ], + [ + "AWD3_MST", + 9, + 1, + "r" + ], + [ + "JQOVF_MST", + 10, + 1, + "r" + ], + [ + "ADRDY_SLV", + 16, + 1, + "r" + ], + [ + "EOSMP_SLV", + 17, + 1, + "r" + ], + [ + "EOC_SLV", + 18, + 1, + "r" + ], + [ + "EOS_SLV", + 19, + 1, + "r" + ], + [ + "OVR_SLV", + 20, + 1, + "r" + ], + [ + "JEOC_SLV", + 21, + 1, + "r" + ], + [ + "JEOS_SLV", + 22, + 1, + "r" + ], + [ + "AWD1_SLV", + 23, + 1, + "r" + ], + [ + "AWD2_SLV", + 24, + 1, + "r" + ], + [ + "AWD3_SLV", + 25, + 1, + "r" + ], + [ + "JQOVF_SLV", + 26, + 1, + "r" + ] + ] + }, + { + "name": "CCR", + "offset": "0x08", + "fields": [ + [ + "DUAL", + 0, + 5 + ], + [ + "DELAY", + 8, + 4 + ], + [ + "DMACFG", + 13, + 1 + ], + [ + "MDMA", + 14, + 2 + ], + [ + "CKMODE", + 16, + 2 + ], + [ + "VREFEN", + 22, + 1 + ], + [ + "VSENSESEL", + 23, + 1 + ], + [ + "VBATSEL", + 24, + 1 + ], + [ + "PRESC", + 18, + 4 + ] + ] + }, + { + "name": "CDR", + "offset": "0x0C", + "fields": [ + [ + "RDATA_SLV", + 16, + 16, + "r" + ], + [ + "RDATA_MST", + 0, + 16, + "r" + ] + ] + } + ] + }, + { + "name": "ADC3", + "base": "0x50000400", + "interrupts": [ + "ADC3" + ], + "registers": [ + { + "name": "ISR", + "offset": "0x00", + "fields": [ + [ + "JQOVF", + 10, + 1 + ], + [ + "AWD3", + 9, + 1 + ], + [ + "AWD2", + 8, + 1 + ], + [ + "AWD1", + 7, + 1 + ], + [ + "JEOS", + 6, + 1 + ], + [ + "JEOC", + 5, + 1 + ], + [ + "OVR", + 4, + 1 + ], + [ + "EOS", + 3, + 1 + ], + [ + "EOC", + 2, + 1 + ], + [ + "EOSMP", + 1, + 1 + ], + [ + "ADRDY", + 0, + 1 + ] + ] + }, + { + "name": "IER", + "offset": "0x04", + "fields": [ + [ + "JQOVFIE", + 10, + 1 + ], + [ + "AWD3IE", + 9, + 1 + ], + [ + "AWD2IE", + 8, + 1 + ], + [ + "AWD1IE", + 7, + 1 + ], + [ + "JEOSIE", + 6, + 1 + ], + [ + "JEOCIE", + 5, + 1 + ], + [ + "OVRIE", + 4, + 1 + ], + [ + "EOSIE", + 3, + 1 + ], + [ + "EOCIE", + 2, + 1 + ], + [ + "EOSMPIE", + 1, + 1 + ], + [ + "ADRDYIE", + 0, + 1 + ] + ] + }, + { + "name": "CR", + "offset": "0x08", + "reset": "0x20002000", + "fields": [ + [ + "ADCAL", + 31, + 1 + ], + [ + "ADCALDIF", + 30, + 1 + ], + [ + "DEEPPWD", + 29, + 1 + ], + [ + "ADVREGEN", + 28, + 1 + ], + [ + "JADSTP", + 5, + 1 + ], + [ + "ADSTP", + 4, + 1 + ], + [ + "JADSTART", + 3, + 1 + ], + [ + "ADSTART", + 2, + 1 + ], + [ + "ADDIS", + 1, + 1 + ], + [ + "ADEN", + 0, + 1 + ] + ] + }, + { + "name": "CFGR", + "offset": "0x0C", + "reset": "0x80000000", + "fields": [ + [ + "JQDIS", + 31, + 1 + ], + [ + "AWDCH1CH", + 26, + 5 + ], + [ + "JAUTO", + 25, + 1 + ], + [ + "JAWD1EN", + 24, + 1 + ], + [ + "AWD1EN", + 23, + 1 + ], + [ + "AWD1SGL", + 22, + 1 + ], + [ + "JQM", + 21, + 1 + ], + [ + "JDISCEN", + 20, + 1 + ], + [ + "DISCNUM", + 17, + 3 + ], + [ + "DISCEN", + 16, + 1 + ], + [ + "ALIGN", + 15, + 1 + ], + [ + "AUTDLY", + 14, + 1 + ], + [ + "CONT", + 13, + 1 + ], + [ + "OVRMOD", + 12, + 1 + ], + [ + "EXTEN", + 10, + 2 + ], + [ + "EXTSEL", + 5, + 5 + ], + [ + "RES", + 3, + 2 + ], + [ + "DMACFG", + 1, + 1 + ], + [ + "DMAEN", + 0, + 1 + ] + ] + }, + { + "name": "CFGR2", + "offset": "0x10", + "fields": [ + [ + "SMPTRIG", + 27, + 1 + ], + [ + "BULB", + 26, + 1 + ], + [ + "SWTRIG", + 25, + 1 + ], + [ + "GCOMP", + 16, + 1 + ], + [ + "ROVSM", + 10, + 1 + ], + [ + "TROVS", + 9, + 1 + ], + [ + "OVSS", + 5, + 4 + ], + [ + "OVSR", + 2, + 3 + ], + [ + "JOVSE", + 1, + 1 + ], + [ + "ROVSE", + 0, + 1 + ] + ] + }, + { + "name": "SMPR1", + "offset": "0x14", + "fields": [ + [ + "SMP9", + 27, + 3 + ], + [ + "SMP8", + 24, + 3 + ], + [ + "SMP7", + 21, + 3 + ], + [ + "SMP6", + 18, + 3 + ], + [ + "SMP5", + 15, + 3 + ], + [ + "SMP4", + 12, + 3 + ], + [ + "SMP3", + 9, + 3 + ], + [ + "SMP2", + 6, + 3 + ], + [ + "SMP1", + 3, + 3 + ], + [ + "SMPPLUS", + 31, + 1 + ], + [ + "SMP0", + 0, + 3 + ] + ] + }, + { + "name": "SMPR2", + "offset": "0x18", + "fields": [ + [ + "SMP18", + 24, + 3 + ], + [ + "SMP17", + 21, + 3 + ], + [ + "SMP16", + 18, + 3 + ], + [ + "SMP15", + 15, + 3 + ], + [ + "SMP14", + 12, + 3 + ], + [ + "SMP13", + 9, + 3 + ], + [ + "SMP12", + 6, + 3 + ], + [ + "SMP11", + 3, + 3 + ], + [ + "SMP10", + 0, + 3 + ] + ] + }, + { + "name": "TR1", + "offset": "0x20", + "reset": "0x0FFF0000", + "fields": [ + [ + "HT1", + 16, + 12 + ], + [ + "AWDFILT", + 12, + 3 + ], + [ + "LT1", + 0, + 12 + ] + ] + }, + { + "name": "TR2", + "offset": "0x24", + "reset": "0x00FF0000", + "fields": [ + [ + "HT2", + 16, + 8 + ], + [ + "LT2", + 0, + 8 + ] + ] + }, + { + "name": "TR3", + "offset": "0x28", + "reset": "0x00FF0000", + "fields": [ + [ + "HT3", + 16, + 8 + ], + [ + "LT3", + 0, + 8 + ] + ] + }, + { + "name": "SQR1", + "offset": "0x30", + "fields": [ + [ + "SQ4", + 24, + 5 + ], + [ + "SQ3", + 18, + 5 + ], + [ + "SQ2", + 12, + 5 + ], + [ + "SQ1", + 6, + 5 + ], + [ + "L", + 0, + 4 + ] + ] + }, + { + "name": "SQR2", + "offset": "0x34", + "fields": [ + [ + "SQ9", + 24, + 5 + ], + [ + "SQ8", + 18, + 5 + ], + [ + "SQ7", + 12, + 5 + ], + [ + "SQ6", + 6, + 5 + ], + [ + "SQ5", + 0, + 5 + ] + ] + }, + { + "name": "SQR3", + "offset": "0x38", + "fields": [ + [ + "SQ14", + 24, + 5 + ], + [ + "SQ13", + 18, + 5 + ], + [ + "SQ12", + 12, + 5 + ], + [ + "SQ11", + 6, + 5 + ], + [ + "SQ10", + 0, + 5 + ] + ] + }, + { + "name": "SQR4", + "offset": "0x3C", + "fields": [ + [ + "SQ16", + 6, + 5 + ], + [ + "SQ15", + 0, + 5 + ] + ] + }, + { + "name": "DR", + "offset": "0x40", + "fields": [ + [ + "RDATA", + 0, + 16, + "r" + ] + ] + }, + { + "name": "JSQR", + "offset": "0x4C", + "fields": [ + [ + "JSQ4", + 27, + 5 + ], + [ + "JSQ3", + 21, + 5 + ], + [ + "JSQ2", + 15, + 5 + ], + [ + "JSQ1", + 9, + 5 + ], + [ + "JEXTEN", + 7, + 2 + ], + [ + "JEXTSEL", + 2, + 5 + ], + [ + "JL", + 0, + 2 + ] + ] + }, + { + "name": "OFR1", + "offset": "0x60", + "fields": [ + [ + "OFFSET1_EN", + 31, + 1 + ], + [ + "OFFSET1_CH", + 26, + 5 + ], + [ + "SATEN", + 25, + 1 + ], + [ + "OFFSETPOS", + 24, + 1 + ], + [ + "OFFSET1", + 0, + 12 + ] + ] + }, + { + "name": "OFR2", + "offset": "0x64", + "fields": [ + [ + "OFFSET1_EN", + 31, + 1 + ], + [ + "OFFSET1_CH", + 26, + 5 + ], + [ + "SATEN", + 25, + 1 + ], + [ + "OFFSETPOS", + 24, + 1 + ], + [ + "OFFSET1", + 0, + 12 + ] + ] + }, + { + "name": "OFR3", + "offset": "0x68", + "fields": [ + [ + "OFFSET1_EN", + 31, + 1 + ], + [ + "OFFSET1_CH", + 26, + 5 + ], + [ + "SATEN", + 25, + 1 + ], + [ + "OFFSETPOS", + 24, + 1 + ], + [ + "OFFSET1", + 0, + 12 + ] + ] + }, + { + "name": "OFR4", + "offset": "0x6C", + "fields": [ + [ + "OFFSET1_EN", + 31, + 1 + ], + [ + "OFFSET1_CH", + 26, + 5 + ], + [ + "SATEN", + 25, + 1 + ], + [ + "OFFSETPOS", + 24, + 1 + ], + [ + "OFFSET1", + 0, + 12 + ] + ] + }, + { + "name": "JDR1", + "offset": "0x80", + "fields": [ + [ + "JDATA1", + 0, + 16, + "r" + ] + ] + }, + { + "name": "JDR2", + "offset": "0x84", + "fields": [ + [ + "JDATA2", + 0, + 16, + "r" + ] + ] + }, + { + "name": "JDR3", + "offset": "0x88", + "fields": [ + [ + "JDATA3", + 0, + 16, + "r" + ] + ] + }, + { + "name": "JDR4", + "offset": "0x8C", + "fields": [ + [ + "JDATA4", + 0, + 16, + "r" + ] + ] + }, + { + "name": "AWD2CR", + "offset": "0xA0", + "fields": [ + [ + "AWD2CH", + 0, + 19 + ] + ] + }, + { + "name": "AWD3CR", + "offset": "0xA4", + "fields": [ + [ + "AWD3CH", + 0, + 19 + ] + ] + }, + { + "name": "DIFSEL", + "offset": "0xB0", + "fields": [ + [ + "DIFSEL_0", + 0, + 1, + "r" + ], + [ + "DIFSEL_1_18", + 1, + 18 + ] + ] + }, + { + "name": "CALFACT", + "offset": "0xB4", + "fields": [ + [ + "CALFACT_D", + 16, + 7 + ], + [ + "CALFACT_S", + 0, + 7 + ] + ] + }, + { + "name": "GCOMP", + "offset": "0xC0", + "fields": [ + [ + "GCOMPCOEFF", + 0, + 14 + ] + ] + } + ] + }, + { + "name": "ADC4", + "base": "0x50000500", + "interrupts": [ + "ADC4" + ], + "derived_from": "ADC1" + }, + { + "name": "ADC5", + "base": "0x50000600", + "interrupts": [ + "ADC5" + ], + "derived_from": "ADC3" + }, + { + "name": "ADC345_Common", + "base": "0x50000700", + "derived_from": "ADC12_Common" + }, + { + "name": "DAC1", + "base": "0x50000800", + "registers": [ + { + "name": "CR", + "offset": "0x00", + "fields": [ + [ + "EN1", + 0, + 1 + ], + [ + "TEN1", + 1, + 1 + ], + [ + "TSEL1", + 2, + 4 + ], + [ + "WAVE1", + 6, + 2 + ], + [ + "MAMP1", + 8, + 4 + ], + [ + "DMAEN1", + 12, + 1 + ], + [ + "DMAUDRIE1", + 13, + 1 + ], + [ + "CEN1", + 14, + 1 + ], + [ + "EN2", + 16, + 1 + ], + [ + "TEN2", + 17, + 1 + ], + [ + "TSEL2", + 18, + 4 + ], + [ + "WAVE2", + 22, + 2 + ], + [ + "MAMP2", + 24, + 4 + ], + [ + "DMAEN2", + 28, + 1 + ], + [ + "DMAUDRIE2", + 29, + 1 + ], + [ + "CEN2", + 30, + 1 + ] + ] + }, + { + "name": "SWTRGR", + "offset": "0x04", + "fields": [ + [ + "SWTRIG1", + 0, + 1, + "w" + ], + [ + "SWTRIG2", + 1, + 1, + "w" + ], + [ + "SWTRIGB1", + 16, + 1, + "w" + ], + [ + "SWTRIGB2", + 17, + 1, + "w" + ] + ] + }, + { + "name": "DHR12R1", + "offset": "0x08", + "fields": [ + [ + "DACC1DHR", + 0, + 12 + ], + [ + "DACC1DHRB", + 16, + 12 + ] + ] + }, + { + "name": "DHR12L1", + "offset": "0x0C", + "fields": [ + [ + "DACC1DHR", + 4, + 12 + ], + [ + "DACC1DHRB", + 20, + 12 + ] + ] + }, + { + "name": "DHR8R1", + "offset": "0x10", + "fields": [ + [ + "DACC1DHR", + 0, + 8 + ], + [ + "DACC1DHRB", + 8, + 8 + ] + ] + }, + { + "name": "DHR12R2", + "offset": "0x14", + "fields": [ + [ + "DACC2DHR", + 0, + 12 + ], + [ + "DACC2DHRB", + 16, + 12 + ] + ] + }, + { + "name": "DHR12L2", + "offset": "0x18", + "fields": [ + [ + "DACC2DHR", + 4, + 12 + ], + [ + "DACC2DHRB", + 20, + 12 + ] + ] + }, + { + "name": "DHR8R2", + "offset": "0x1C", + "fields": [ + [ + "DACC2DHR", + 0, + 8 + ], + [ + "DACC2DHRB", + 8, + 8 + ] + ] + }, + { + "name": "DHR12RD", + "offset": "0x20", + "fields": [ + [ + "DACC1DHR", + 0, + 12 + ], + [ + "DACC2DHR", + 16, + 12 + ] + ] + }, + { + "name": "DHR12LD", + "offset": "0x24", + "fields": [ + [ + "DACC1DHR", + 4, + 12 + ], + [ + "DACC2DHR", + 20, + 12 + ] + ] + }, + { + "name": "DHR8RD", + "offset": "0x28", + "fields": [ + [ + "DACC1DHR", + 0, + 8 + ], + [ + "DACC2DHR", + 8, + 8 + ] + ] + }, + { + "name": "DOR1", + "offset": "0x2C", + "fields": [ + [ + "DACC1DOR", + 0, + 12, + "r" + ], + [ + "DACC1DORB", + 16, + 12, + "r" + ] + ] + }, + { + "name": "DOR2", + "offset": "0x30", + "fields": [ + [ + "DACC2DOR", + 0, + 12, + "r" + ], + [ + "DACC2DORB", + 16, + 12, + "r" + ] + ] + }, + { + "name": "SR", + "offset": "0x34", + "fields": [ + [ + "DAC1RDY", + 11, + 1 + ], + [ + "DORSTAT1", + 12, + 1 + ], + [ + "DMAUDR1", + 13, + 1 + ], + [ + "CAL_FLAG1", + 14, + 1, + "r" + ], + [ + "BWST1", + 15, + 1, + "r" + ], + [ + "DAC2RDY", + 27, + 1 + ], + [ + "DORSTAT2", + 28, + 1 + ], + [ + "DMAUDR2", + 29, + 1 + ], + [ + "CAL_FLAG2", + 30, + 1, + "r" + ], + [ + "BWST2", + 31, + 1, + "r" + ] + ] + }, + { + "name": "CCR", + "offset": "0x38", + "fields": [ + [ + "OTRIM1", + 0, + 5 + ], + [ + "OTRIM2", + 16, + 5 + ] + ] + }, + { + "name": "MCR", + "offset": "0x3C", + "fields": [ + [ + "MODE1", + 0, + 3 + ], + [ + "DMADOUBLE1", + 8, + 1 + ], + [ + "SINFORMAT1", + 9, + 1 + ], + [ + "HFSEL", + 14, + 2 + ], + [ + "MODE2", + 16, + 3 + ], + [ + "DMADOUBLE2", + 24, + 1 + ], + [ + "SINFORMAT2", + 25, + 1 + ] + ] + }, + { + "name": "SHSR1", + "offset": "0x40", + "fields": [ + [ + "TSAMPLE1", + 0, + 10 + ] + ] + }, + { + "name": "SHSR2", + "offset": "0x44", + "fields": [ + [ + "TSAMPLE2", + 0, + 10 + ] + ] + }, + { + "name": "SHHR", + "offset": "0x48", + "reset": "0x00010001", + "fields": [ + [ + "THOLD1", + 0, + 10 + ], + [ + "THOLD2", + 16, + 10 + ] + ] + }, + { + "name": "SHRR", + "offset": "0x4C", + "reset": "0x00010001", + "fields": [ + [ + "TREFRESH1", + 0, + 8 + ], + [ + "TREFRESH2", + 16, + 8 + ] + ] + }, + { + "name": "STR1", + "offset": "0x58", + "fields": [ + [ + "STRSTDATA1", + 0, + 12 + ], + [ + "STDIR1", + 12, + 1 + ], + [ + "STINCDATA1", + 16, + 16 + ] + ] + }, + { + "name": "STR2", + "offset": "0x5C", + "fields": [ + [ + "STRSTDATA2", + 0, + 12 + ], + [ + "STDIR2", + 12, + 1 + ], + [ + "STINCDATA2", + 16, + 16 + ] + ] + }, + { + "name": "STMODR", + "offset": "0x60", + "fields": [ + [ + "STRSTTRIGSEL1", + 0, + 4 + ], + [ + "STINCTRIGSEL1", + 8, + 4 + ], + [ + "STRSTTRIGSEL2", + 16, + 4 + ], + [ + "STINCTRIGSEL2", + 24, + 4 + ] + ] + } + ], + "interrupts": [ + "TIM6_DACUNDER" + ] + }, + { + "name": "DAC2", + "base": "0x50000C00", + "derived_from": "DAC1", + "interrupts": [ + "TIM7" + ] + }, + { + "name": "DAC3", + "base": "0x50001000", + "derived_from": "DAC1", + "interrupts": [ + "TIM6_DACUNDER" + ] + }, + { + "name": "DAC4", + "base": "0x50001400", + "derived_from": "DAC1", + "interrupts": [ + "TIM7" + ] + }, + { + "name": "RNG", + "base": "0x50060800", + "interrupts": [ + "RNG" + ], + "registers": [ + { + "name": "CR", + "offset": "0x00", + "fields": [ + [ + "CED", + 5, + 1 + ], + [ + "IE", + 3, + 1 + ], + [ + "RNGEN", + 2, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x04", + "fields": [ + [ + "SEIS", + 6, + 1 + ], + [ + "CEIS", + 5, + 1 + ], + [ + "SECS", + 2, + 1, + "r" + ], + [ + "CECS", + 1, + 1, + "r" + ], + [ + "DRDY", + 0, + 1, + "r" + ] + ] + }, + { + "name": "DR", + "offset": "0x08", + "fields": [ + [ + "RNDATA", + 0, + 32, + "r" + ] + ] + } + ] + }, + { + "name": "FMC", + "base": "0xA0000000", + "interrupts": [ + "FMC" + ], + "registers": [ + { + "name": "BCR1", + "offset": "0x00", + "reset": "0x000030D0", + "fields": [ + [ + "MBKEN", + 0, + 1 + ], + [ + "MUXEN", + 1, + 1 + ], + [ + "MTYP", + 2, + 2 + ], + [ + "MWID", + 4, + 2 + ], + [ + "FACCEN", + 6, + 1 + ], + [ + "BURSTEN", + 8, + 1 + ], + [ + "WAITPOL", + 9, + 1 + ], + [ + "WAITCFG", + 11, + 1 + ], + [ + "WREN", + 12, + 1 + ], + [ + "WAITEN", + 13, + 1 + ], + [ + "EXTMOD", + 14, + 1 + ], + [ + "ASYNCWAIT", + 15, + 1 + ], + [ + "CPSIZE", + 16, + 3 + ], + [ + "CBURSTRW", + 19, + 1 + ], + [ + "CCLKEN", + 20, + 1 + ], + [ + "WFDIS", + 21, + 1 + ], + [ + "NBLSET", + 22, + 2 + ] + ] + }, + { + "name": "BTR1", + "offset": "0x04", + "reset": "0xFFFFFFFF", + "fields": [ + [ + "DATAHLD", + 30, + 2 + ], + [ + "ACCMOD", + 28, + 2 + ], + [ + "DATLAT", + 24, + 4 + ], + [ + "CLKDIV", + 20, + 4 + ], + [ + "BUSTURN", + 16, + 4 + ], + [ + "DATAST", + 8, + 8 + ], + [ + "ADDHLD", + 4, + 4 + ], + [ + "ADDSET", + 0, + 4 + ] + ] + }, + { + "name": "BCR2", + "offset": "0x08", + "reset": "0x000030D0", + "fields": [ + [ + "MBKEN", + 0, + 1 + ], + [ + "MUXEN", + 1, + 1 + ], + [ + "MTYP", + 2, + 2 + ], + [ + "MWID", + 4, + 2 + ], + [ + "FACCEN", + 6, + 1 + ], + [ + "BURSTEN", + 8, + 1 + ], + [ + "WAITPOL", + 9, + 1 + ], + [ + "WAITCFG", + 11, + 1 + ], + [ + "WREN", + 12, + 1 + ], + [ + "WAITEN", + 13, + 1 + ], + [ + "EXTMOD", + 14, + 1 + ], + [ + "ASYNCWAIT", + 15, + 1 + ], + [ + "CPSIZE", + 16, + 3 + ], + [ + "CBURSTRW", + 19, + 1 + ], + [ + "CCLKEN", + 20, + 1 + ], + [ + "WFDIS", + 21, + 1 + ], + [ + "NBLSET", + 22, + 2 + ] + ] + }, + { + "name": "BTR2", + "offset": "0x0C", + "reset": "0xFFFFFFFF", + "fields": [ + [ + "DATAHLD", + 30, + 2 + ], + [ + "ACCMOD", + 28, + 2 + ], + [ + "DATLAT", + 24, + 4 + ], + [ + "CLKDIV", + 20, + 4 + ], + [ + "BUSTURN", + 16, + 4 + ], + [ + "DATAST", + 8, + 8 + ], + [ + "ADDHLD", + 4, + 4 + ], + [ + "ADDSET", + 0, + 4 + ] + ] + }, + { + "name": "BCR3", + "offset": "0x10", + "reset": "0x000030D0", + "fields": [ + [ + "MBKEN", + 0, + 1 + ], + [ + "MUXEN", + 1, + 1 + ], + [ + "MTYP", + 2, + 2 + ], + [ + "MWID", + 4, + 2 + ], + [ + "FACCEN", + 6, + 1 + ], + [ + "BURSTEN", + 8, + 1 + ], + [ + "WAITPOL", + 9, + 1 + ], + [ + "WAITCFG", + 11, + 1 + ], + [ + "WREN", + 12, + 1 + ], + [ + "WAITEN", + 13, + 1 + ], + [ + "EXTMOD", + 14, + 1 + ], + [ + "ASYNCWAIT", + 15, + 1 + ], + [ + "CPSIZE", + 16, + 3 + ], + [ + "CBURSTRW", + 19, + 1 + ], + [ + "CCLKEN", + 20, + 1 + ], + [ + "WFDIS", + 21, + 1 + ], + [ + "NBLSET", + 22, + 2 + ] + ] + }, + { + "name": "BTR3", + "offset": "0x14", + "reset": "0xFFFFFFFF", + "fields": [ + [ + "DATAHLD", + 30, + 2 + ], + [ + "ACCMOD", + 28, + 2 + ], + [ + "DATLAT", + 24, + 4 + ], + [ + "CLKDIV", + 20, + 4 + ], + [ + "BUSTURN", + 16, + 4 + ], + [ + "DATAST", + 8, + 8 + ], + [ + "ADDHLD", + 4, + 4 + ], + [ + "ADDSET", + 0, + 4 + ] + ] + }, + { + "name": "BCR4", + "offset": "0x18", + "reset": "0x000030D0", + "fields": [ + [ + "MBKEN", + 0, + 1 + ], + [ + "MUXEN", + 1, + 1 + ], + [ + "MTYP", + 2, + 2 + ], + [ + "MWID", + 4, + 2 + ], + [ + "FACCEN", + 6, + 1 + ], + [ + "BURSTEN", + 8, + 1 + ], + [ + "WAITPOL", + 9, + 1 + ], + [ + "WAITCFG", + 11, + 1 + ], + [ + "WREN", + 12, + 1 + ], + [ + "WAITEN", + 13, + 1 + ], + [ + "EXTMOD", + 14, + 1 + ], + [ + "ASYNCWAIT", + 15, + 1 + ], + [ + "CPSIZE", + 16, + 3 + ], + [ + "CBURSTRW", + 19, + 1 + ], + [ + "CCLKEN", + 20, + 1 + ], + [ + "WFDIS", + 21, + 1 + ], + [ + "NBLSET", + 22, + 2 + ] + ] + }, + { + "name": "BTR4", + "offset": "0x1C", + "reset": "0xFFFFFFFF", + "fields": [ + [ + "DATAHLD", + 30, + 2 + ], + [ + "ACCMOD", + 28, + 2 + ], + [ + "DATLAT", + 24, + 4 + ], + [ + "CLKDIV", + 20, + 4 + ], + [ + "BUSTURN", + 16, + 4 + ], + [ + "DATAST", + 8, + 8 + ], + [ + "ADDHLD", + 4, + 4 + ], + [ + "ADDSET", + 0, + 4 + ] + ] + }, + { + "name": "PCSCNTR", + "offset": "0x20", + "fields": [ + [ + "CSCOUNT", + 0, + 16 + ], + [ + "CNTB1EN", + 16, + 1 + ], + [ + "CNTB2EN", + 17, + 1 + ], + [ + "CNTB3EN", + 18, + 1 + ], + [ + "CNTB4EN", + 19, + 1 + ] + ] + }, + { + "name": "PCR", + "offset": "0x80", + "reset": "0x00000018", + "fields": [ + [ + "ECCPS", + 17, + 3 + ], + [ + "TAR", + 13, + 4 + ], + [ + "TCLR", + 9, + 4 + ], + [ + "ECCEN", + 6, + 1 + ], + [ + "PWID", + 4, + 2 + ], + [ + "PTYP", + 3, + 1 + ], + [ + "PBKEN", + 2, + 1 + ], + [ + "PWAITEN", + 1, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x84", + "reset": "0x00000040", + "fields": [ + [ + "FEMPT", + 6, + 1, + "r" + ], + [ + "IFEN", + 5, + 1 + ], + [ + "ILEN", + 4, + 1 + ], + [ + "IREN", + 3, + 1 + ], + [ + "IFS", + 2, + 1 + ], + [ + "ILS", + 1, + 1 + ], + [ + "IRS", + 0, + 1 + ] + ] + }, + { + "name": "PMEM", + "offset": "0x88", + "reset": "0xFCFCFCFC", + "fields": [ + [ + "MEMHIZx", + 24, + 8 + ], + [ + "MEMHOLDx", + 16, + 8 + ], + [ + "MEMWAITx", + 8, + 8 + ], + [ + "MEMSETx", + 0, + 8 + ] + ] + }, + { + "name": "PATT", + "offset": "0x8C", + "reset": "0xFCFCFCFC", + "fields": [ + [ + "ATTHIZx", + 24, + 8 + ], + [ + "ATTHOLDx", + 16, + 8 + ], + [ + "ATTWAITx", + 8, + 8 + ], + [ + "ATTSETx", + 0, + 8 + ] + ] + }, + { + "name": "ECCR", + "offset": "0x94", + "fields": [ + [ + "ECCx", + 0, + 32, + "r" + ] + ] + }, + { + "name": "BWTR1", + "offset": "0x104", + "reset": "0x0FFFFFFF", + "fields": [ + [ + "DATAHLD", + 30, + 2 + ], + [ + "ACCMOD", + 28, + 2 + ], + [ + "BUSTURN", + 16, + 4 + ], + [ + "DATAST", + 8, + 8 + ], + [ + "ADDHLD", + 4, + 4 + ], + [ + "ADDSET", + 0, + 4 + ] + ] + }, + { + "name": "BWTR2", + "offset": "0x10C", + "reset": "0x0FFFFFFF", + "fields": [ + [ + "DATAHLD", + 30, + 2 + ], + [ + "ACCMOD", + 28, + 2 + ], + [ + "BUSTURN", + 16, + 4 + ], + [ + "DATAST", + 8, + 8 + ], + [ + "ADDHLD", + 4, + 4 + ], + [ + "ADDSET", + 0, + 4 + ] + ] + }, + { + "name": "BWTR3", + "offset": "0x114", + "reset": "0x0FFFFFFF", + "fields": [ + [ + "DATAHLD", + 30, + 2 + ], + [ + "ACCMOD", + 28, + 2 + ], + [ + "BUSTURN", + 16, + 4 + ], + [ + "DATAST", + 8, + 8 + ], + [ + "ADDHLD", + 4, + 4 + ], + [ + "ADDSET", + 0, + 4 + ] + ] + }, + { + "name": "BWTR4", + "offset": "0x11C", + "reset": "0x0FFFFFFF", + "fields": [ + [ + "DATAHLD", + 30, + 2 + ], + [ + "ACCMOD", + 28, + 2 + ], + [ + "BUSTURN", + 16, + 4 + ], + [ + "DATAST", + 8, + 8 + ], + [ + "ADDHLD", + 4, + 4 + ], + [ + "ADDSET", + 0, + 4 + ] + ] + } + ] + }, + { + "name": "QUADSPI", + "base": "0xA0001000", + "interrupts": [ + "QUADSPI" + ], + "registers": [ + { + "name": "CR", + "offset": "0x00", + "fields": [ + [ + "PRESCALER", + 24, + 8 + ], + [ + "PMM", + 23, + 1 + ], + [ + "APMS", + 22, + 1 + ], + [ + "TOIE", + 20, + 1 + ], + [ + "SMIE", + 19, + 1 + ], + [ + "FTIE", + 18, + 1 + ], + [ + "TCIE", + 17, + 1 + ], + [ + "TEIE", + 16, + 1 + ], + [ + "FTHRES", + 8, + 4 + ], + [ + "FSEL", + 7, + 1 + ], + [ + "DFM", + 6, + 1 + ], + [ + "SSHIFT", + 4, + 1 + ], + [ + "TCEN", + 3, + 1 + ], + [ + "DMAEN", + 2, + 1 + ], + [ + "ABORT", + 1, + 1 + ], + [ + "EN", + 0, + 1 + ] + ] + }, + { + "name": "DCR", + "offset": "0x04", + "fields": [ + [ + "FSIZE", + 16, + 5 + ], + [ + "CSHT", + 8, + 3 + ], + [ + "CKMODE", + 0, + 1 + ] + ] + }, + { + "name": "SR", + "offset": "0x08", + "fields": [ + [ + "FLEVEL", + 8, + 5, + "r" + ], + [ + "BUSY", + 5, + 1, + "r" + ], + [ + "TOF", + 4, + 1, + "r" + ], + [ + "SMF", + 3, + 1, + "r" + ], + [ + "FTF", + 2, + 1, + "r" + ], + [ + "TCF", + 1, + 1, + "r" + ], + [ + "TEF", + 0, + 1, + "r" + ] + ] + }, + { + "name": "FCR", + "offset": "0x0C", + "fields": [ + [ + "CTOF", + 4, + 1 + ], + [ + "CSMF", + 3, + 1 + ], + [ + "CTCF", + 1, + 1 + ], + [ + "CTEF", + 0, + 1 + ] + ] + }, + { + "name": "DLR", + "offset": "0x10", + "fields": [ + [ + "DL", + 0, + 32 + ] + ] + }, + { + "name": "CCR", + "offset": "0x14", + "fields": [ + [ + "DDRM", + 31, + 1 + ], + [ + "SIOO", + 28, + 1 + ], + [ + "FMODE", + 26, + 2 + ], + [ + "DMODE", + 24, + 2 + ], + [ + "DCYC", + 18, + 5 + ], + [ + "ABSIZE", + 16, + 2 + ], + [ + "ABMODE", + 14, + 2 + ], + [ + "ADSIZE", + 12, + 2 + ], + [ + "ADMODE", + 10, + 2 + ], + [ + "IMODE", + 8, + 2 + ], + [ + "INSTRUCTION", + 0, + 8 + ] + ] + }, + { + "name": "AR", + "offset": "0x18", + "fields": [ + [ + "ADDRESS", + 0, + 32 + ] + ] + }, + { + "name": "ABR", + "offset": "0x1C", + "fields": [ + [ + "ALTERNATE", + 0, + 32 + ] + ] + }, + { + "name": "DR", + "offset": "0x20", + "fields": [ + [ + "DATA", + 0, + 32 + ] + ] + }, + { + "name": "PSMKR", + "offset": "0x24", + "fields": [ + [ + "MASK", + 0, + 32 + ] + ] + }, + { + "name": "PSMAR", + "offset": "0x28", + "fields": [ + [ + "MATCH", + 0, + 32 + ] + ] + }, + { + "name": "PIR", + "offset": "0x2C", + "fields": [ + [ + "INTERVAL", + 0, + 16 + ] + ] + }, + { + "name": "LPTR", + "offset": "0x30", + "fields": [ + [ + "TIMEOUT", + 0, + 16 + ] + ] + } + ] + }, + { + "name": "DBGMCU", + "base": "0xE0042000", + "registers": [ + { + "name": "IDCODE", + "offset": "0x00", + "fields": [ + [ + "REV_ID", + 16, + 16, + "r" + ], + [ + "DEV_ID", + 0, + 12, + "r" + ] + ], + "reset": "0x20016469" + }, + { + "name": "CR", + "offset": "0x04", + "fields": [ + [ + "DBG_SLEEP", + 0, + 1 + ], + [ + "DBG_STOP", + 1, + 1 + ], + [ + "DBG_STANDBY", + 2, + 1 + ], + [ + "TRACE_IOEN", + 5, + 1 + ], + [ + "TRACE_MODE", + 6, + 2 + ] + ] + }, + { + "name": "APB1L_FZ", + "offset": "0x08", + "fields": [ + [ + "DBG_TIMER2_STOP", + 0, + 1 + ], + [ + "DBG_TIM3_STOP", + 1, + 1 + ], + [ + "DBG_TIM4_STOP", + 2, + 1 + ], + [ + "DBG_TIM5_STOP", + 3, + 1 + ], + [ + "DBG_TIMER6_STOP", + 4, + 1 + ], + [ + "DBG_TIM7_STOP", + 5, + 1 + ], + [ + "DBG_RTC_STOP", + 10, + 1 + ], + [ + "DBG_WWDG_STOP", + 11, + 1 + ], + [ + "DBG_IWDG_STOP", + 12, + 1 + ], + [ + "DBG_I2C1_STOP", + 21, + 1 + ], + [ + "DBG_I2C2_STOP", + 22, + 1 + ], + [ + "DBG_I2C3_STOP", + 30, + 1 + ], + [ + "DBG_LPTIMER_STOP", + 31, + 1 + ] + ] + }, + { + "name": "APB1H_FZ", + "offset": "0x0C", + "fields": [ + [ + "DBG_I2C4_STOP", + 1, + 1 + ] + ] + }, + { + "name": "APB2_FZ", + "offset": "0x10", + "fields": [ + [ + "DBG_TIM1_STOP", + 11, + 1 + ], + [ + "DBG_TIM8_STOP", + 13, + 1 + ], + [ + "DBG_TIM15_STOP", + 16, + 1 + ], + [ + "DBG_TIM16_STOP", + 17, + 1 + ], + [ + "DBG_TIM17_STOP", + 18, + 1 + ], + [ + "DBG_TIM20_STOP", + 20, + 1 + ], + [ + "DBG_HRTIM0_STOP", + 26, + 1 + ], + [ + "DBG_HRTIM1_STOP", + 27, + 1 + ], + [ + "DBG_HRTIM2_STOP", + 28, + 1 + ], + [ + "DBG_HRTIM3_STOP", + 29, + 1 + ] + ] + } + ] + } + ] +} diff --git a/core/mcu/mach.h b/core/mcu/mach.h index e0e2b200a..e4ee938a5 100644 --- a/core/mcu/mach.h +++ b/core/mcu/mach.h @@ -547,6 +547,12 @@ struct esk_mach { * (an RP2040's QSPI_SS, BOOTSEL's): strap_low is called when it is low */ const char *strap_pin; void (*strap_low)(struct esk_mach *m); + /* the boot's choice where it is not a BOOT0 pin's alone (an STM32G4's: + * BOOT0 is PB8 or an option bit, RM0440 2.6): `boot_pin`'s level once + * the circuit has settled (0 when it names none or floats) goes to + * boot_system, which says whether the part boots its system memory */ + const char *boot_pin; + int (*boot_system)(struct esk_mach *m, int pin_high); /* that reset is the core's alone (an ESP32-C3's CPU reset): the * devices keep their state */ int reset_cpu_only; diff --git a/core/mcu/mcu.c b/core/mcu/mcu.c index 05464c286..07763f109 100644 --- a/core/mcu/mcu.c +++ b/core/mcu/mcu.c @@ -505,7 +505,8 @@ static void quantum_cb(void *ctx, void *arg, es_time_t now) } if (st->m.strap_pin && st->m.strap_low && !level_of(esk_comp_pin(st->c, st->m.strap_pin), 1)) st->m.strap_low(&st->m); - if (level_of(st->boot0, 0)) { + if (st->m.boot_system ? st->m.boot_system(&st->m, st->m.boot_pin ? level_of(esk_comp_pin(st->c, st->m.boot_pin), 0) : 0) + : level_of(st->boot0, 0)) { st->boot_fail = 1; raise(st, ES_SEV_WARNING, "mcu.boot_mode", "BOOT0 is high: the part boots its system memory (the vendor's bootloader), which is " diff --git a/core/mcu/models.c b/core/mcu/models.c index b7cfbea77..08772fa27 100644 --- a/core/mcu/models.c +++ b/core/mcu/models.c @@ -17,10 +17,12 @@ static const struct esk_rf_model_type model_types[] = { { "stm32-rcc", &esk_stm32_rcc_ops, esk_stm32_rcc_create }, + { "stm32g4-rcc", &esk_stm32g4_rcc_ops, esk_stm32g4_rcc_create }, { "stm32f1-gpio", &esk_stm32f1_gpio_ops, esk_stm32f1_gpio_create }, { "stm32f1-afio", &esk_stm32f1_afio_ops, esk_stm32f1_afio_create }, { "stm32-exti", &esk_stm32_exti_ops, esk_stm32_exti_create }, { "stm32-usart", &esk_stm32_usart_ops, esk_stm32_usart_create }, + { "stm32-usart-v2", &esk_stm32_usartv2_ops, esk_stm32_usartv2_create }, { "stm32-tim", &esk_stm32_tim_ops, esk_stm32_tim_create }, { "stm32f1-adc", &esk_stm32f1_adc_ops, esk_stm32f1_adc_create }, { "stm32-spi", &esk_stm32_spi_ops, esk_stm32_spi_create }, @@ -28,7 +30,9 @@ static const struct esk_rf_model_type model_types[] = { { "stm32f1-flash", &esk_stm32f1_flash_ops, esk_stm32f1_flash_create }, { "stm32-pwr", &esk_stm32_storage_ops, esk_stm32_storage_create }, { "stm32f4-pwr", &esk_stm32f4_pwr_ops, esk_stm32f4_pwr_create }, + { "stm32g4-pwr", &esk_stm32g4_pwr_ops, esk_stm32g4_pwr_create }, { "stm32f4-flash", &esk_stm32f4_flash_ops, esk_stm32f4_flash_create }, + { "stm32g4-flash", &esk_stm32g4_flash_ops, esk_stm32g4_flash_create }, { "stm32f4-gpio", &esk_stm32f4_gpio_ops, esk_stm32f4_gpio_create }, { "stm32f4-syscfg", &esk_stm32f4_syscfg_ops, esk_stm32f4_syscfg_create }, { "stm32f4-dbgmcu", &esk_stm32f4_dbgmcu_ops, esk_stm32f4_dbgmcu_create }, diff --git a/core/mcu/stm32/crc.c b/core/mcu/stm32/crc.c index c3136a8aa..e5ad7c34d 100644 --- a/core/mcu/stm32/crc.c +++ b/core/mcu/stm32/crc.c @@ -11,6 +11,16 @@ * - IDR is a byte of storage the RESET bit leaves alone; * - its clock is RCC's CRCEN (the register file's gate). * + * The programmable unit (an STM32G4's, RM0440 16; registers INIT and POL): + * - CR's POLYSIZE gives the CRC's width (32, 16, 8 or 7 bits) and POL its + * polynomial; RESET loads DR with INIT; DR is written a byte, halfword + * or word at a time, the access's width of data fed most significant + * bit first; + * - REV_IN reverses the data's bits by bytes (01), halfwords (10) or the + * word (11), within the width written (a byte written with 11 is + * reversed as a byte); REV_OUT makes DR read the CRC bit-reversed + * within its width. + * * Inside: the four AHB clocks a word takes are not seen (a write to DR * while the unit computes stalls the bus until it is done, so the program * reads the finished value either way); the bus stall itself is not @@ -22,9 +32,69 @@ struct crc { struct esk_rf_periph *p; - struct esk_rf_reg *dr, *cr; + struct esk_rf_reg *dr, *cr, *init, *pol; + u32 crc; /* the programmable unit's CRC, DR shows it (REV_OUT) */ }; +static u32 reverse(u32 v, int width) +{ + u32 r = 0; + int k; + for (k = 0; k < width; k++) + r |= (v >> k & 1u) << (width - 1 - k); + return r; +} + +static int poly_width(const struct crc *c) +{ + static const int w[4] = { 32, 16, 8, 7 }; + return w[(u32)c->cr->value >> 3 & 3u]; +} + +static u32 width_mask(int w) { return w >= 32 ? 0xffffffffu : (1u << w) - 1; } + +/* DR as the programmable unit shows its CRC */ +static void show(struct crc *c) +{ + int w = poly_width(c); + u32 v = c->crc & width_mask(w); + if (c->cr->value & (1u << 7)) + v = reverse(v, w); + esk_rf_hw(c->dr, v); +} + +/* `nbits` of `data` (its most significant first) into the CRC */ +static void feed(struct crc *c, u32 data, int nbits) +{ + int w = poly_width(c), k; + u32 poly = (u32)c->pol->value & width_mask(w), top = 1u << (w - 1), crc = c->crc; + for (k = nbits - 1; k >= 0; k--) { + u32 in = data >> k & 1u, msb = (crc & top) != 0; + crc = (crc << 1) & width_mask(w); + if (in ^ msb) + crc ^= poly; + } + c->crc = crc; +} + +static void v2_write(struct crc *c, int n, u32 v) +{ + u32 rev = (u32)c->cr->value >> 5 & 3u; + int bits = 8 * n, unit = rev == 1 ? 8 : rev == 2 ? 16 : 32, k; + if (n < 4) + v &= width_mask(bits); + if (rev) { + u32 out = 0; + if (unit > bits) + unit = bits; + for (k = 0; k < bits; k += unit) + out |= reverse(v >> k & width_mask(unit), unit) << k; + v = out; + } + feed(c, v, bits); + show(c); +} + /* the CRC-32 of `crc` followed by the word `w`, MSB first */ static u32 crc_word(u32 crc, u32 w) { @@ -44,6 +114,21 @@ static u32 crc_read(void *ctx, u32 off, int n) static void crc_write(void *ctx, u32 off, int n, u32 v) { struct crc *c = (struct crc *)ctx; + if (c->pol) { /* the programmable unit */ + if (off - esk_rf_off(c->dr) < 4) { + v2_write(c, n, v); + return; + } + esk_rf_write(c->p, off, n, v); + if (off - esk_rf_off(c->cr) < 4) { + if (c->cr->value & 1u) { + c->crc = (u32)c->init->value & width_mask(poly_width(c)); + esk_rf_hw(c->cr, c->cr->value & ~(u64)1u); /* RESET reads 0 */ + } + show(c); + } + return; + } if (c->dr && off - esk_rf_off(c->dr) < 4) { if (n == 1) v &= 0xffu; @@ -60,7 +145,11 @@ static void crc_write(void *ctx, u32 off, int n, u32 v) esk_rf_write(c->p, off, n, v); } -static void crc_reset(void *ctx) { (void)ctx; } +static void crc_reset(void *ctx) +{ + struct crc *c = (struct crc *)ctx; + c->crc = 0xffffffffu; +} const struct esk_dev_ops esk_stm32_crc_ops = { "stm32-crc", crc_read, crc_write, crc_reset, 0, 0, @@ -77,5 +166,10 @@ void *esk_stm32_crc_create(struct esk_mach *m, struct esk_rf_periph *p) c->p = p; c->dr = esk_rf_reg(p, "DR"); c->cr = esk_rf_reg(p, "CR"); + c->init = esk_rf_reg(p, "INIT"); + c->pol = esk_rf_reg(p, "POL"); + if (!c->init || !c->cr) + c->pol = 0; + c->crc = 0xffffffffu; return c; } diff --git a/core/mcu/stm32/dbgmcu_f4.c b/core/mcu/stm32/dbgmcu_f4.c index 4cc49a701..a39052111 100644 --- a/core/mcu/stm32/dbgmcu_f4.c +++ b/core/mcu/stm32/dbgmcu_f4.c @@ -76,6 +76,11 @@ void *esk_stm32f4_dbgmcu_create(struct esk_mach *s, struct esk_rf_periph *p) d->cr = esk_rf_reg(p, "DBGMCU_CR"); d->apb1 = esk_rf_reg(p, "DBGMCU_APB1_FZ"); d->apb2 = esk_rf_reg(p, "DBGMCU_APB2_FZ"); + if (!d->cr) { /* a G4's names (RM0440 47.6): CR, APB1L_FZ, APB2_FZ */ + d->cr = esk_rf_reg(p, "CR"); + d->apb1 = esk_rf_reg(p, "APB1L_FZ"); + d->apb2 = esk_rf_reg(p, "APB2_FZ"); + } if (!d->cr) return 0; return d; diff --git a/core/mcu/stm32/exti.c b/core/mcu/stm32/exti.c index 5f344034a..a49b0c14a 100644 --- a/core/mcu/stm32/exti.c +++ b/core/mcu/stm32/exti.c @@ -21,26 +21,43 @@ * - an edge or a SWIER trigger on a line whose EMR bit is set is an event * to the core: it ends a WFE (esk_cortexm_event); * - an edge on line 9 is the DAC's external trigger, on lines 11 and 15 - * the ADCs' (EXTI_11, EXTI_15). */ + * the ADCs' (EXTI_11, EXTI_15). + * + * The STM32G4's (RM0440 15), its registers in two banks (IMR1 to PR1 for + * lines 0 to 31, IMR2 to PR2 for 32 to 43): the configurable lines as + * above, their internal sources' interrupts by the G4's names (16 and 38 + * to 41 PVD_PVM, 17 RTC_ALARM, 19 RTC_TAMP_CSS_LSE, 20 RTC_WKUP, 21, 22 + * and 29 COMP1_2_3, 30 to 32 COMP4_5_6, 33 COMP7); the direct lines (18, + * 23 to 28, 34 to 37, 42, 43: the USB's, the I2Cs', U(S)ARTs', LPUART's + * and LPTIM's wake-ups) have no edge detection or pending bit, their + * peripherals' interrupts being their own; an edge on lines 0 to 15 is also + * the DMA request multiplexer's synchronisation and trigger input. */ #include #include #include "mcu/stm32/stm32.h" +#define MAX_LINES 64 + struct exti { struct esk_mach *s; struct esk_rf_periph *p; - struct esk_rf_reg *imr, *emr, *rtsr, *ftsr, *swier, *pr; - int nlines; - int irq[32]; + /* bank 0: lines 0-31, bank 1: lines 32-63 */ + struct esk_rf_reg *imr[2], *emr[2], *rtsr[2], *ftsr[2], *swier[2], *pr[2]; + int nbanks, nlines, g4; + int irq[MAX_LINES]; }; +static u64 pending(const struct exti *x, int b) +{ + return x->pr[b] && x->imr[b] ? x->pr[b]->value & x->imr[b]->value : 0; +} + static void pend(struct exti *x) { - u32 act = (u32)(x->pr->value & x->imr->value); int k, last = -1; for (k = 0; k < x->nlines; k++) - if ((act >> k & 1) && x->irq[k] >= 0 && x->irq[k] != last) { + if ((pending(x, k / 32) >> (k % 32) & 1) && x->irq[k] >= 0 && x->irq[k] != last) { esk_rf_interrupt(x->p, x->irq[k]); last = x->irq[k]; } @@ -56,15 +73,26 @@ void esk_stm32_exti_input(struct esk_mach *s, int line, int level) { struct exti *x = exti_of(s); u64 bit; + int b; if (!x || line < 0 || line >= x->nlines) return; - bit = (u64)1u << line; - if ((level && (x->rtsr->value & bit)) || (!level && (x->ftsr->value & bit))) { - esk_rf_hw(x->pr, x->pr->value | bit); - if (x->emr && (x->emr->value & bit)) + b = line / 32; + bit = (u64)1u << (line % 32); + if (!x->rtsr[b] || !x->ftsr[b] || !x->pr[b]) + return; + if (line < 16 && x->g4) { + /* the DMA request multiplexer's synchronisation and trigger inputs + * see every edge of lines 0-15 (dmamux_g4.c) */ + char sig[8]; + snprintf(sig, sizeof sig, "EXTI%d", line); + esk_stm32_trigger(s, sig, level); + } + if ((level && (x->rtsr[b]->value & bit)) || (!level && (x->ftsr[b]->value & bit))) { + esk_rf_hw(x->pr[b], x->pr[b]->value | bit); + if (x->emr[b] && (x->emr[b]->value & bit)) esk_cortexm_event(s); pend(x); - if (line == 9 || line == 11 || line == 15) { + if (!x->g4 && (line == 9 || line == 11 || line == 15)) { /* the line's edge: the DAC's (9) and the ADCs' (11, 15) trigger */ char sig[8]; snprintf(sig, sizeof sig, "EXTI%d", line); @@ -74,6 +102,19 @@ void esk_stm32_exti_input(struct esk_mach *s, int line, int level) } } +/* a direct line's event (a G4's wake-up lines): an event to the core when + * its EMR bit is set */ +void esk_stm32_exti_direct(struct esk_mach *s, int line) +{ + struct exti *x = exti_of(s); + int b; + if (!x || line < 0 || line >= x->nlines) + return; + b = line / 32; + if (x->emr[b] && (x->emr[b]->value >> (line % 32) & 1)) + esk_cortexm_event(s); +} + static u32 exti_read(void *ctx, u32 off, int n) { struct exti *x = (struct exti *)ctx; @@ -83,19 +124,26 @@ static u32 exti_read(void *ctx, u32 off, int n) static void exti_write(void *ctx, u32 off, int n, u32 v) { struct exti *x = (struct exti *)ctx; - u64 sw0 = x->swier->value, pr0 = x->pr->value; - esk_rf_write(x->p, off, n, v); - if (off == esk_rf_off(x->swier)) { - u64 up = x->swier->value & ~sw0; - if (up) - esk_rf_hw(x->pr, x->pr->value | up); - if (x->emr && (up & x->emr->value)) - esk_cortexm_event(x->s); + u64 sw0[2], pr0[2]; + int b; + for (b = 0; b < x->nbanks; b++) { + sw0[b] = x->swier[b] ? x->swier[b]->value : 0; + pr0[b] = x->pr[b] ? x->pr[b]->value : 0; } - if (off == esk_rf_off(x->pr)) { - u64 cleared = pr0 & ~x->pr->value; - if (cleared) - esk_rf_hw(x->swier, x->swier->value & ~cleared); + esk_rf_write(x->p, off, n, v); + for (b = 0; b < x->nbanks; b++) { + if (x->swier[b] && off == esk_rf_off(x->swier[b])) { + u64 up = x->swier[b]->value & ~sw0[b]; + if (up && x->pr[b]) + esk_rf_hw(x->pr[b], x->pr[b]->value | up); + if (x->emr[b] && (up & x->emr[b]->value)) + esk_cortexm_event(x->s); + } + if (x->pr[b] && off == esk_rf_off(x->pr[b])) { + u64 cleared = pr0[b] & ~x->pr[b]->value; + if (cleared && x->swier[b]) + esk_rf_hw(x->swier[b], x->swier[b]->value & ~cleared); + } } pend(x); } @@ -106,7 +154,7 @@ const struct esk_dev_ops esk_stm32_exti_ops = { /* the interrupt of an internal line (16 and up), by the names the parts * give them, or -1 */ -static int line_irq(struct esk_rf *rf, int k) +static int line_irq(struct esk_rf *rf, int k, int g4) { static const char *const names[][3] = { { "PVD", 0, 0 }, /* 16 */ @@ -118,6 +166,15 @@ static int line_irq(struct esk_rf *rf, int k) { "RTC_WKUP", 0, 0 }, /* 22 */ }; int i, n; + if (g4) { + static const char *const g4names[44] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + "PVD_PVM", "RTC_ALARM", 0, "RTC_TAMP_CSS_LSE", "RTC_WKUP", "COMP1_2_3", "COMP1_2_3", 0, + 0, 0, 0, 0, 0, "COMP1_2_3", "COMP4_5_6", "COMP4_5_6", + "COMP4_5_6", "COMP7", 0, 0, 0, 0, "PVD_PVM", "PVD_PVM", "PVD_PVM", "PVD_PVM", 0, 0, + }; + return k < 44 && g4names[k] ? esk_rf_irq_named(rf, g4names[k]) : -1; + } if (k < 16 || k - 16 >= (int)(sizeof names / sizeof names[0])) return -1; for (i = 0; i < 3 && names[k - 16][i]; i++) @@ -126,36 +183,70 @@ static int line_irq(struct esk_rf *rf, int k) return -1; } +static int bank_lines(const struct esk_rf_reg *imr) +{ + int k, n = 0; + for (k = 0; imr && k < imr->nf; k++) + if (imr->f[k].name && imr->f[k].lsb + imr->f[k].width > n) + n = imr->f[k].lsb + imr->f[k].width; + return n; +} + void *esk_stm32_exti_create(struct esk_mach *s, struct esk_rf_periph *p) { struct exti x, *c; + static const char *const sfx[2] = { "1", "2" }; char name[16]; - int k; + int k, b; memset(&x, 0, sizeof x); x.s = s; x.p = p; - x.imr = esk_rf_reg(p, "IMR"); - x.emr = esk_rf_reg(p, "EMR"); - x.rtsr = esk_rf_reg(p, "RTSR"); - x.ftsr = esk_rf_reg(p, "FTSR"); - x.swier = esk_rf_reg(p, "SWIER"); - x.pr = esk_rf_reg(p, "PR"); - if (!x.imr || !x.rtsr || !x.ftsr || !x.swier || !x.pr) + x.imr[0] = esk_rf_reg(p, "IMR"); + if (x.imr[0]) { + x.nbanks = 1; + x.emr[0] = esk_rf_reg(p, "EMR"); + x.rtsr[0] = esk_rf_reg(p, "RTSR"); + x.ftsr[0] = esk_rf_reg(p, "FTSR"); + x.swier[0] = esk_rf_reg(p, "SWIER"); + x.pr[0] = esk_rf_reg(p, "PR"); + } else { + /* the G4's two banks */ + for (b = 0; b < 2; b++) { + snprintf(name, sizeof name, "IMR%s", sfx[b]); + x.imr[b] = esk_rf_reg(p, name); + snprintf(name, sizeof name, "EMR%s", sfx[b]); + x.emr[b] = esk_rf_reg(p, name); + snprintf(name, sizeof name, "RTSR%s", sfx[b]); + x.rtsr[b] = esk_rf_reg(p, name); + snprintf(name, sizeof name, "FTSR%s", sfx[b]); + x.ftsr[b] = esk_rf_reg(p, name); + snprintf(name, sizeof name, "SWIER%s", sfx[b]); + x.swier[b] = esk_rf_reg(p, name); + snprintf(name, sizeof name, "PR%s", sfx[b]); + x.pr[b] = esk_rf_reg(p, name); + if (x.imr[b]) + x.nbanks = b + 1; + } + x.g4 = 1; + } + if (!x.imr[0] || !x.rtsr[0] || !x.ftsr[0] || !x.swier[0] || !x.pr[0]) return 0; /* the lines IMR has a bit for */ - for (k = 0; k < x.imr->nf; k++) - if (x.imr->f[k].name && x.imr->f[k].lsb + x.imr->f[k].width > x.nlines) - x.nlines = x.imr->f[k].lsb + x.imr->f[k].width; - if (x.nlines < 16 || x.nlines > 32) + x.nlines = bank_lines(x.imr[0]); + if (x.nbanks == 2) + x.nlines = 32 + bank_lines(x.imr[1]); + if (x.nlines < 16 || x.nlines > MAX_LINES) x.nlines = 16; for (k = 0; k < x.nlines; k++) { if (k < 5) snprintf(name, sizeof name, "EXTI%d", k); else snprintf(name, sizeof name, "%s", k < 10 ? "EXTI9_5" : "EXTI15_10"); - x.irq[k] = k < 16 ? esk_rf_irq(p, name) : line_irq(s->rf, k); + x.irq[k] = k < 16 ? esk_rf_irq(p, name) : line_irq(s->rf, k, x.g4); } - esk_rf_set_mwv(x.pr, ~(u64)0, ESK_MWV_1CLR); + for (b = 0; b < x.nbanks; b++) + if (x.pr[b]) + esk_rf_set_mwv(x.pr[b], ~(u64)0, ESK_MWV_1CLR); c = (struct exti *)esk_mach_alloc(s, sizeof *c); if (c) *c = x; diff --git a/core/mcu/stm32/flash_g4.c b/core/mcu/stm32/flash_g4.c new file mode 100644 index 000000000..a07365d1f --- /dev/null +++ b/core/mcu/stm32/flash_g4.c @@ -0,0 +1,731 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* Copyright 2026 Junior Deogracias */ +/* flash_g4.c -- the STM32G4's flash interface (RM0440 5), over the + * register file, for the 512 KiB category 3 parts (the STM32G474xE): + * - the organisation: with the option bytes' DBANK set (the factory's) + * two banks of 256 KiB, bank 1 at 0x08000000 and bank 2 at + * 0x08040000, of 128 pages of 2 KiB each; with DBANK clear one bank of + * 128 pages of 4 KiB; + * - KEYR's keys (0x45670123, then 0xCDEF89AB) clear CR's LOCK; a wrong + * key is a bus error and keeps CR locked until the next reset; LOCK + * set by the program locks it again. A locked CR ignores writes; + * - programming (PG): a double word at a time, its first word stored at + * an address aligned on 8 bytes and its second at the next word; the + * program starts with the second. A store that is not a word is + * SIZERR, one out of the pair's place PGAERR, one without PG (or with + * PER or MER set) PGSERR, one to a page the option bytes' WRP areas + * protect WRPERR; a double word that is not erased is PROGERR unless + * all of it is written 0. A refused store changes nothing; + * - fast programming (FSTPG): a row of 32 double words (256 bytes) from + * its first, each stored in order; a double word out of order is + * MISSERR, and the row is programmed at once when its last arrives; + * - erasing: PER with PNB (and BKER in dual-bank mode) and STRT erases a + * page, MER1 and MER2 their banks (both: the main memory), to 0xFF; a + * protected page is WRPERR and stays; + * - SR: EOP at an operation's end when EOPIE is set; an error sets + * OPERR when ERRIE is set; both raise the FLASH interrupt; the flags + * are cleared by writing 1; + * - read-while-write: an operation on one bank stalls a program running + * from that bank until it ends (the bus waits, nothing runs); one + * running from the other bank, or from SRAM, goes on and polls BSY; a + * store to the flash while BSY is set waits for it; + * - timing: BSY for DS12288's typical times: a double word 81.7 us, a + * fast-programmed row 2.61 ms, a page's erase 22.02 ms, a bank's 22.13 + * ms; EOP at their end; + * - the option bytes: OPTKEYR's keys (0x08192A3B, 0x4C5D6E7F) clear CR's + * OPTLOCK; OPTSTRT writes OPTR, PCROP1SR/ER, WRP1AR/BR, SEC1R to bank + * 1's option bytes (0x1FFF7800) and PCROP2SR/ER, WRP2AR/BR, SEC2R to + * bank 2's (0x1FFFF808), each word followed by its complement; each + * reset loads them, a word whose complement does not match taking its + * default (and OPTVERR); OBL_LAUNCH reloads them through a system + * reset (RCC_CSR's OBLRSTF). What they say acts from then: the write + * protection and the banks here, the watchdogs' hardware start + * (wdg.c), the low-power resets (pwr_g4.c), the boot: BOOT0 is PB8's + * level at reset while nSWBOOT0 is 1, else nBOOT0's complement; BOOT0 + * high with nBOOT1 set boots the system memory (ST's bootloader, not + * simulated: the runtime says so and the core stays idle); + * - read timing (RM0440 5.3.2): the memory is read 64 bits at a time, + * each read taking ACR.LATENCY wait states; a fetch from the double + * word being executed waits nothing; with PRFTEN the next one is read + * meanwhile; with ICEN the instruction cache holds 32 lines, with DCEN + * the data cache 8 (LRU); ICRST and DCRST empty them. + * + * Not modelled: the times' spread and maximum values (the typical value + * each time), the option bytes' programming time (OPTSTRT is done at once), + * the read protection's levels and their regression's mass erase (RDP is + * stored), PCROP's read refusal (RDERR) and the securable area's + * protection (SEC_PROT, BOOT_LOCK), ECC (ECCR never reports an error), + * the bank swap (BFB2 and SYSCFG's FB_MODE are kept; bank 1 stays at + * 0x08000000), the boot from SRAM (BOOT0 high with nBOOT1 clear: the + * part boots its flash here), a reset during an operation leaving the memory + * half-programmed, the power-down modes (PDKEYR, RUN_PD, SLEEP_PD), the + * caches' line length (lines of one double word here). */ +#include + +#include "mcu/stm32/stm32.h" + +#define FLASH_BASE 0x08000000u +#define FLASH_SIZE (512u * 1024u) +#define BANK_SIZE (256u * 1024u) +#define OTP_BASE 0x1FFF7000u +#define OTP_SIZE 1024u +#define OB1_BASE 0x1FFF7800u +#define OB2_BASE 0x1FFFF800u + +#define KEY1 0x45670123u +#define KEY2 0xCDEF89ABu +#define OPTKEY1 0x08192A3Bu +#define OPTKEY2 0x4C5D6E7Fu + +#define SR_EOP (1u << 0) +#define SR_OPERR (1u << 1) +#define SR_PROGERR (1u << 3) +#define SR_WRPERR (1u << 4) +#define SR_PGAERR (1u << 5) +#define SR_SIZERR (1u << 6) +#define SR_PGSERR (1u << 7) +#define SR_MISSERR (1u << 8) +#define SR_FASTERR (1u << 9) +#define SR_RDERR (1u << 14) +#define SR_OPTVERR (1u << 15) +#define SR_BSY (1u << 16) +#define SR_W1C 0xC3FBu + +#define CR_PG (1u << 0) +#define CR_PER (1u << 1) +#define CR_MER1 (1u << 2) +#define CR_BKER (1u << 11) +#define CR_MER2 (1u << 15) +#define CR_STRT (1u << 16) +#define CR_OPTSTRT (1u << 17) +#define CR_FSTPG (1u << 18) +#define CR_EOPIE (1u << 24) +#define CR_ERRIE (1u << 25) +#define CR_OBL_LAUNCH (1u << 27) +#define CR_OPTLOCK (1u << 30) +#define CR_LOCK (1u << 31) + +#define OPTR_DBANK (1u << 22) + +#define ACR_PRFTEN 0x100u +#define ACR_ICEN 0x200u +#define ACR_DCEN 0x400u +#define ACR_ICRST 0x800u +#define ACR_DCRST 0x1000u + +#define ILINES 32 +#define DLINES 8 +#define NO_LINE 0xFFFFFFFFu + +/* DS12288's typical programming times (its flash memory characteristics) */ +#define PS_US 1000000ull +#define PROGRAM_PS (81700000ull) +#define ROW_PS (2610ull * PS_US) +#define PAGE_ERASE_PS (22020ull * PS_US) +#define BANK_ERASE_PS (22130ull * PS_US) + +/* the option registers and their place in the option bytes: bank 1's at + * OB1_BASE + off, bank 2's at OB2_BASE + off */ +static const struct { const char *reg; int bank; u32 off; u32 dflt; } obs[] = { + { "OPTR", 1, 0x00, 0xFFEFF8AAu }, { "PCROP1SR", 1, 0x08, 0x00007FFFu }, { "PCROP1ER", 1, 0x10, 0 }, + { "WRP1AR", 1, 0x18, 0x0000007Fu }, { "WRP1BR", 1, 0x20, 0x0000007Fu }, { "SEC1R", 1, 0x28, 0 }, + { "PCROP2SR", 2, 0x08, 0x00007FFFu }, { "PCROP2ER", 2, 0x10, 0 }, { "WRP2AR", 2, 0x18, 0x0000007Fu }, + { "WRP2BR", 2, 0x20, 0x0000007Fu }, { "SEC2R", 2, 0x28, 0 }, +}; +#define NOBS ((int)(sizeof obs / sizeof obs[0])) + +struct g4flash { + struct esk_mach *s; + struct esk_rf_periph *p; + struct esk_rf_reg *acr, *keyr, *optkeyr, *sr, *cr, *optr, *ob[NOBS]; + int irq; + int key_step, optkey_step, wrong_key; + /* the double word being programmed: its first word's address and value */ + int half; + u32 at, lo; + /* fast programming: the row's start, the double words received, the data */ + u32 row; + int row_n; + u32 row_data[64]; + /* the operation in progress */ + int busy, running, bank; + u64 left_ps, since; + /* read timing */ + u32 cur_line, pf_line; + u64 pf_ready, use; + u32 iline[ILINES], dline[DLINES]; + u64 iuse[ILINES], duse[DLINES]; +}; + +static int dual(const struct g4flash *f) { return f->optr && (f->optr->value & OPTR_DBANK) != 0; } + +static u32 page_size(const struct g4flash *f) { return dual(f) ? 2048u : 4096u; } + +/* the bank (1 or 2) holding main-memory offset `off` */ +static int bank_of(const struct g4flash *f, u32 off) +{ + return dual(f) && off >= BANK_SIZE ? 2 : 1; +} + +/* whether the WRP areas protect the page at `off` */ +static int protected_at(const struct g4flash *f, u32 off) +{ + int b = bank_of(f, off), k; + u32 page = (dual(f) ? off % BANK_SIZE : off) / page_size(f); + for (k = 0; k < 2; k++) { + const char *name = b == 1 ? (k ? "WRP1BR" : "WRP1AR") : (k ? "WRP2BR" : "WRP2AR"); + struct esk_rf_reg *r = esk_rf_reg(f->p, name); + u32 v, strt, end; + if (!r) + continue; + v = (u32)r->value; + strt = v & 0x7Fu; + end = v >> 16 & 0x7Fu; + if (strt <= end && page >= strt && page <= end) + return 1; + } + return 0; +} + +static void irq_if(struct g4flash *f) +{ + u32 sr = (u32)f->sr->value, cr = (u32)f->cr->value; + if (((sr & SR_EOP) && (cr & CR_EOPIE)) || ((sr & SR_OPERR) && (cr & CR_ERRIE))) + esk_rf_interrupt(f->p, f->irq); +} + +static void done(struct g4flash *f, u32 err) +{ + u32 sr = (u32)f->sr->value; + if (err) { + sr |= err; + if (f->cr->value & CR_ERRIE) + sr |= SR_OPERR; + } else if (f->cr->value & CR_EOPIE) { + sr |= SR_EOP; + } + esk_rf_hw(f->sr, sr); + irq_if(f); +} + +static void flash_clock(struct g4flash *f) +{ + if (f->busy && !f->running) + f->since = f->s->cycles; + esk_rf_clock(f->p, &f->running, f->busy); +} + +static void finish(struct g4flash *f) +{ + if (!f->busy) + return; + f->busy = 0; + esk_rf_hw(f->sr, f->sr->value & ~(u64)SR_BSY); + esk_rf_hw(f->cr, f->cr->value & ~(u64)CR_STRT); + flash_clock(f); + done(f, 0); +} + +static u64 ps_to_cycles(const struct g4flash *f, u64 ps) +{ + u64 khz = esk_mach_core_hz(f->s) / 1000u; + return (ps * (khz ? khz : 16000u) + 999999999ull) / 1000000000ull; +} + +/* an accepted operation on bank `bank` (0: both) takes `ps`; a program + * running from that bank stalls until it ends */ +static void begin(struct g4flash *f, u64 ps, int bank) +{ + u32 pc = f->s->cpu ? f->s->cpu->ops->pc(f->s->cpu) : 0, off; + finish(f); + f->busy = 1; + f->bank = bank; + f->left_ps = ps; + esk_rf_hw(f->sr, f->sr->value | SR_BSY); + flash_clock(f); + off = pc >= FLASH_BASE && pc < FLASH_BASE + FLASH_SIZE ? pc - FLASH_BASE : pc < FLASH_SIZE ? pc : FLASH_SIZE; + if (off < FLASH_SIZE && (!bank || !dual(f) || bank_of(f, off) == bank)) + f->s->bus_stall += ps_to_cycles(f, ps); +} + +static void changed(struct g4flash *f) +{ + f->s->flash_written = 1; + esk_bus_code_changed(&f->s->bus); +} + +/* ---- programming ---------------------------------------------------------------- */ + +static int erased_dw(const u8 *p) +{ + int k; + for (k = 0; k < 8; k++) + if (p[k] != 0xFF) + return 0; + return 1; +} + +static void put_dw(struct g4flash *f, struct esk_region *r, u32 a, u32 lo, u32 hi) +{ + u8 *p = r->mem + (a - r->base); + esk_mem_wr_le(p, 4, esk_mem_rd_le(p, 4) & lo); + esk_mem_wr_le(p + 4, 4, esk_mem_rd_le(p + 4, 4) & hi); + (void)f; +} + +static void rom_write(void *ctx, struct esk_region *r, u32 a, int n, u32 v) +{ + struct g4flash *f = (struct g4flash *)ctx; + u32 cr = (u32)f->cr->value, off; + int otp = 0; + if (r->size == FLASH_SIZE && r->kind != ESK_MEM_ROM) + off = a - r->base; + else if (a >= OTP_BASE && a + (u32)n <= OTP_BASE + OTP_SIZE) + off = 0, otp = 1; + else + return; /* system memory, the option bytes: read-only to stores */ + if (f->busy && f->s->bus_stall == 0) + f->s->bus_stall = ps_to_cycles(f, f->left_ps); /* a store while BSY waits */ + if ((cr & CR_LOCK) || !(cr & (CR_PG | CR_FSTPG)) || (cr & (CR_PER | CR_MER1 | CR_MER2))) { + f->half = 0; + done(f, SR_PGSERR); + return; + } + if (n != 4) { + f->half = 0; + done(f, SR_SIZERR); + return; + } + if (!f->half) { + if (a & 7u) { + done(f, SR_PGAERR); + return; + } + if (!otp && protected_at(f, off)) { + done(f, SR_WRPERR); + return; + } + f->half = 1; + f->at = a; + f->lo = v; + return; + } + f->half = 0; + if (a != f->at + 4u) { + done(f, SR_PGAERR); + return; + } + { + const u8 *p = r->mem + (f->at - r->base); + if (!erased_dw(p) && (f->lo || v)) { + done(f, SR_PROGERR); + return; + } + } + if (cr & CR_FSTPG) { + u32 row = (f->at & ~255u); + if (f->row_n == 0) { + if (f->at != row) { + done(f, SR_MISSERR); + return; + } + f->row = row; + } else if (f->at != f->row + 8u * (u32)f->row_n) { + f->row_n = 0; + done(f, SR_MISSERR); + return; + } + f->row_data[2 * f->row_n] = f->lo; + f->row_data[2 * f->row_n + 1] = v; + if (++f->row_n < 32) + return; + { + int k; + for (k = 0; k < 32; k++) + put_dw(f, r, f->row + 8u * (u32)k, f->row_data[2 * k], f->row_data[2 * k + 1]); + } + f->row_n = 0; + changed(f); + begin(f, ROW_PS, otp ? 1 : bank_of(f, off)); + return; + } + put_dw(f, r, f->at, f->lo, v); + changed(f); + begin(f, PROGRAM_PS, otp ? 1 : bank_of(f, off)); +} + +/* ---- erasing -------------------------------------------------------------------- */ + +static void erase(struct g4flash *f, u32 off, u32 size) +{ + struct esk_region *r = esk_bus_region(&f->s->bus, FLASH_BASE + off, size); + if (r) + memset(r->mem + (FLASH_BASE + off - r->base), 0xff, size); + changed(f); +} + +static int range_protected(const struct g4flash *f, u32 off, u32 size) +{ + u32 a; + for (a = off; a < off + size; a += page_size(f)) + if (protected_at(f, a)) + return 1; + return 0; +} + +static void start(struct g4flash *f) +{ + u32 cr = (u32)f->cr->value; + if (cr & (CR_MER1 | CR_MER2)) { + u32 off = 0, size = FLASH_SIZE; + int bank = 0; + if (dual(f) && !((cr & CR_MER1) && (cr & CR_MER2))) { + bank = cr & CR_MER1 ? 1 : 2; + off = bank == 1 ? 0 : BANK_SIZE; + size = BANK_SIZE; + } + if (range_protected(f, off, size)) { + done(f, SR_WRPERR); + return; + } + erase(f, off, size); + begin(f, BANK_ERASE_PS, bank); + return; + } + if (cr & CR_PER) { + u32 pnb = cr >> 3 & 0x7Fu, off; + if (dual(f)) + off = ((cr & CR_BKER) ? BANK_SIZE : 0) + pnb * 2048u; + else + off = pnb * 4096u; + if (protected_at(f, off)) { + done(f, SR_WRPERR); + return; + } + erase(f, off, page_size(f)); + begin(f, PAGE_ERASE_PS, bank_of(f, off)); + return; + } + done(f, SR_PGSERR); /* STRT with neither PER nor MER */ +} + +/* ---- the option bytes ---------------------------------------------------------- */ + +static u32 ob_addr(int k) { return (obs[k].bank == 1 ? OB1_BASE : OB2_BASE) + obs[k].off; } + +static void load_options(struct g4flash *f) +{ + int k, bad = 0; + for (k = 0; k < NOBS; k++) { + u32 v = 0xFFFFFFFFu, nv = 0xFFFFFFFFu; + if (!f->ob[k]) + continue; + if (esk_bus_debug_read(&f->s->bus, ob_addr(k), 4, &v) || esk_bus_debug_read(&f->s->bus, ob_addr(k) + 4u, 4, &nv) || + (v ^ nv) != 0xFFFFFFFFu) { + v = obs[k].dflt; + bad = 1; + } + esk_rf_hw(f->ob[k], v); /* the reserved bits too: they read the option bytes */ + } + if (bad) + esk_rf_hw(f->sr, f->sr->value | SR_OPTVERR); +} + +static void program_options(struct g4flash *f) +{ + int k; + for (k = 0; k < NOBS; k++) { + u32 v; + if (!f->ob[k]) + continue; + v = (u32)f->ob[k]->value | (u32)~esk_rf_fields(f->ob[k]); + if (esk_bus_debug_write(&f->s->bus, ob_addr(k), 4, v) == 0) + (void)esk_bus_debug_write(&f->s->bus, ob_addr(k) + 4u, 4, ~v); + } + f->s->flash_written = 1; + done(f, 0); +} + +/* ---- read timing --------------------------------------------------------------- */ + +static void cache_clear(u32 *line, u64 *use, int n) +{ + int i; + for (i = 0; i < n; i++) { + line[i] = NO_LINE; + use[i] = 0; + } +} + +static int cache_hit(struct g4flash *f, u32 *line, u64 *use, int n, u32 l) +{ + int i; + for (i = 0; i < n; i++) + if (line[i] == l) { + use[i] = ++f->use; + return 1; + } + return 0; +} + +static void cache_fill(struct g4flash *f, u32 *line, u64 *use, int n, u32 l) +{ + int i, lru = 0; + for (i = 1; i < n; i++) + if (use[i] < use[lru]) + lru = i; + line[lru] = l; + use[lru] = ++f->use; +} + +static u32 ifetch(void *ctx, u32 off, u64 now) +{ + struct g4flash *f = (struct g4flash *)ctx; + u32 acr = (u32)f->acr->value, ws = acr & 0xfu, l = off >> 3, st; + if (l == f->cur_line) + return 0; + if ((acr & ACR_PRFTEN) && l == f->pf_line) + st = f->pf_ready > now ? (u32)(f->pf_ready - now) : 0; + else if ((acr & ACR_ICEN) && cache_hit(f, f->iline, f->iuse, ILINES, l)) + st = 0; + else { + st = ws; + if (acr & ACR_ICEN) + cache_fill(f, f->iline, f->iuse, ILINES, l); + } + f->cur_line = l; + if (acr & ACR_PRFTEN) { + f->pf_line = l + 1; + f->pf_ready = now + st + ws + 1; + } else { + f->pf_line = NO_LINE; + } + return st; +} + +static u32 dread(void *ctx, u32 off) +{ + struct g4flash *f = (struct g4flash *)ctx; + u32 acr = (u32)f->acr->value, ws = acr & 0xfu, l = off >> 3; + if (!ws) + return 0; + if (acr & ACR_DCEN) { + if (cache_hit(f, f->dline, f->duse, DLINES, l)) + return 0; + cache_fill(f, f->dline, f->duse, DLINES, l); + } + return ws; +} + +static void timing_reset(struct g4flash *f) +{ + const struct esk_region *r = esk_bus_region(&f->s->bus, FLASH_BASE, 4); + f->cur_line = f->pf_line = NO_LINE; + f->pf_ready = 0; + cache_clear(f->iline, f->iuse, ILINES); + cache_clear(f->dline, f->duse, DLINES); + if (r && f->acr) { + f->s->ftime.mem = r->mem; + f->s->ftime.ifetch = ifetch; + f->s->ftime.dread = dread; + f->s->ftime.ctx = f; + } +} + +/* ---- the registers -------------------------------------------------------------- */ + +static u32 flash_read(void *ctx, u32 off, int n) +{ + struct g4flash *f = (struct g4flash *)ctx; + if (off - esk_rf_off(f->keyr) < 4 || off - esk_rf_off(f->optkeyr) < 4) + return 0; /* write-only */ + return esk_rf_read(f->p, off, n); +} + +static int is_ob_reg(const struct g4flash *f, u32 off) +{ + int k; + for (k = 0; k < NOBS; k++) + if (f->ob[k] && off - esk_rf_off(f->ob[k]) < 4) + return 1; + return 0; +} + +static void flash_write(void *ctx, u32 off, int n, u32 v) +{ + struct g4flash *f = (struct g4flash *)ctx; + if (off - esk_rf_off(f->keyr) < 4) { + if (f->wrong_key || !(f->cr->value & CR_LOCK)) + return; + if (f->key_step == 0 && v == KEY1) { + f->key_step = 1; + } else if (f->key_step == 1 && v == KEY2) { + f->key_step = 0; + esk_rf_hw(f->cr, f->cr->value & ~(u64)CR_LOCK); + } else { + f->key_step = 0; + f->wrong_key = 1; + esk_bus_fault(&f->s->bus); + } + return; + } + if (off - esk_rf_off(f->optkeyr) < 4) { + if (!(f->cr->value & CR_OPTLOCK) || (f->cr->value & CR_LOCK)) + return; + if (f->optkey_step == 0 && v == OPTKEY1) { + f->optkey_step = 1; + } else if (f->optkey_step == 1 && v == OPTKEY2) { + f->optkey_step = 0; + esk_rf_hw(f->cr, f->cr->value & ~(u64)CR_OPTLOCK); + } else { + f->optkey_step = 0; + esk_bus_fault(&f->s->bus); + } + return; + } + if (off - esk_rf_off(f->sr) < 4) { + u32 clr = (v << 8 * (off - esk_rf_off(f->sr))) & SR_W1C; + esk_rf_hw(f->sr, f->sr->value & ~(u64)clr); + return; + } + if (off - esk_rf_off(f->cr) < 4) { + u32 was = (u32)f->cr->value, now; + if (was & CR_LOCK) + return; + if (f->busy) + return; + esk_rf_write(f->p, off, n, v); + now = (u32)f->cr->value; + if (was & CR_OPTLOCK) /* OPTSTRT and OBL_LAUNCH need OPTLOCK clear */ + now &= ~(CR_OPTSTRT | CR_OBL_LAUNCH); + if ((was & CR_OPTLOCK) && !(now & CR_OPTLOCK)) + now |= CR_OPTLOCK; /* cleared only by the keys */ + esk_rf_hw(f->cr, now); + if (!(now & (CR_PG | CR_FSTPG))) + f->half = 0, f->row_n = 0; + if ((now & CR_STRT) && !(was & CR_STRT)) { + start(f); + if (!f->busy) + esk_rf_hw(f->cr, f->cr->value & ~(u64)CR_STRT); + } + if ((now & CR_OPTSTRT) && !(was & CR_OPTSTRT)) { + program_options(f); + esk_rf_hw(f->cr, f->cr->value & ~(u64)CR_OPTSTRT); + } + if (now & CR_OBL_LAUNCH) { + /* the option bytes reload through a system reset */ + esk_stm32g4_rcc_obl(f->s); + if (!f->s->reset_req) { + f->s->reset_cause = ESK_RESET_SOFTWARE; + f->s->reset_req = 1; + f->s->yield = 1; + } + } + return; + } + if (is_ob_reg(f, off)) { + if (f->cr->value & CR_OPTLOCK) + return; /* the option registers are written only with OPTLOCK clear */ + esk_rf_write(f->p, off, n, v); + return; + } + esk_rf_write(f->p, off, n, v); /* ACR, ECCR, PDKEYR */ + if (f->acr && off - esk_rf_off(f->acr) < 4) { + u32 acr = (u32)f->acr->value; + if ((acr & ACR_ICRST) && !(acr & ACR_ICEN)) + cache_clear(f->iline, f->iuse, ILINES); + if ((acr & ACR_DCRST) && !(acr & ACR_DCEN)) + cache_clear(f->dline, f->duse, DLINES); + esk_stm32g4_rcc_check(f->s); + } +} + +static void flash_tick(void *ctx, u32 cycles) +{ + struct g4flash *f = (struct g4flash *)ctx; + u64 ps, khz; + if (!f->running) + return; + if (f->since > f->s->cycles) + f->since = 0; + cycles = esk_mach_after(f->s, cycles, f->since); + f->since = 0; + khz = esk_mach_core_hz(f->s) / 1000u; + ps = (u64)cycles * 1000000000ull / (khz ? khz : 16000u); + if (f->left_ps <= ps) + finish(f); + else + f->left_ps -= ps; +} + +static int flash_next(void *ctx, u32 *cycles) +{ + struct g4flash *f = (struct g4flash *)ctx; + u64 n; + if (!f->running) + return 0; + n = ps_to_cycles(f, f->left_ps); + *cycles = n == 0 ? 1 : n > 0xffffffffu ? 0xffffffffu : (u32)n; + return 1; +} + +static void flash_reset(void *ctx) +{ + struct g4flash *f = (struct g4flash *)ctx; + timing_reset(f); + f->busy = f->running = 0; + f->key_step = f->optkey_step = 0; + f->wrong_key = 0; + f->half = 0; + f->row_n = 0; + load_options(f); +} + +/* RM0440 2.6, table 6: BOOT0 from PB8 (nSWBOOT0 1) or the complement of + * nBOOT0; with BOOT0 high and nBOOT1 set, the system memory */ +static int boot_system(struct esk_mach *s, int pin_high) +{ + struct esk_rf_periph *p = s->rf ? esk_rf_periph(s->rf, "FLASH") : 0; + struct esk_rf_reg *optr = p ? esk_rf_reg(p, "OPTR") : 0; + u32 o; + int boot0; + if (!optr) + return 0; + o = (u32)optr->value; + boot0 = (o >> 26 & 1u) ? pin_high : !(o >> 27 & 1u); + return boot0 && (o >> 23 & 1u); +} + +const struct esk_dev_ops esk_stm32g4_flash_ops = { + "stm32g4-flash", flash_read, flash_write, flash_reset, flash_tick, flash_next, +}; + +void *esk_stm32g4_flash_create(struct esk_mach *s, struct esk_rf_periph *p) +{ + struct g4flash *f; + int k; + if (!esk_rf_reg(p, "OPTR") || !esk_rf_reg(p, "KEYR") || !esk_rf_reg(p, "CR") || !esk_rf_reg(p, "SR")) + return 0; + f = (struct g4flash *)esk_mach_alloc(s, sizeof *f); + if (!f) + return 0; + f->s = s; + f->p = p; + f->acr = esk_rf_reg(p, "ACR"); + f->keyr = esk_rf_reg(p, "KEYR"); + f->optkeyr = esk_rf_reg(p, "OPTKEYR"); + f->sr = esk_rf_reg(p, "SR"); + f->cr = esk_rf_reg(p, "CR"); + f->optr = esk_rf_reg(p, "OPTR"); + if (!f->optkeyr) + return 0; + for (k = 0; k < NOBS; k++) + f->ob[k] = esk_rf_reg(p, obs[k].reg); + f->irq = esk_rf_irq(p, "FLASH"); + s->bus.rom_write = rom_write; + s->bus.rom_write_ctx = f; + s->boot_pin = "PB8"; + s->boot_system = boot_system; + timing_reset(f); + return f; +} diff --git a/core/mcu/stm32/gpio_f4.c b/core/mcu/stm32/gpio_f4.c index 57ee105fe..abaabc5c7 100644 --- a/core/mcu/stm32/gpio_f4.c +++ b/core/mcu/stm32/gpio_f4.c @@ -11,7 +11,8 @@ * from the description's io.electrical; PUPDR's pull-up (01) or * pull-down (10) is on in every mode but analog (11 is reserved: none); * - BSRR's low half sets ODR's bits and its high half resets them, the set - * winning when both are written; it reads 0; + * winning when both are written; it reads 0; BRR (the G4's, RM0440 + * 8.4.11) resets the bits its low half has set, and reads 0; * - IDR is what each pin reads through its Schmitt trigger, sampled as it * is read: an output's level (an open-drain output's 1 lets go, and the * pin reads what the circuit makes of it, else the pull, else 0, @@ -56,7 +57,7 @@ struct f4gpio { struct esk_mach *s; struct esk_rf_periph *p; - struct esk_rf_reg *moder, *otyper, *ospeedr, *pupdr, *idr, *odr, *bsrr, *lckr, *afrl, *afrh; + struct esk_rf_reg *moder, *otyper, *ospeedr, *pupdr, *idr, *odr, *bsrr, *lckr, *afrl, *afrh, *brr; int port; /* 0 for A */ esk_mach_pin out[16]; /* what each pin was told to be */ int af_in[16]; /* the level last given to a pin's AF inputs, -1 none */ @@ -118,8 +119,9 @@ static void update_once(struct f4gpio *g) o.drive = -1; if (standby || (wkup >> i & 1u)) { /* Standby lets the pins go; an enabled WKUP pin is an input - * with a pull-down (pwr_f4.c) */ - o.pull = (wkup >> i & 1u) ? 2 : 0; + * with its pull (an F4's pull-down, pwr_f4.c), a G4's pins the + * pulls PWR keeps (pwr_g4.c) */ + o.pull = esk_stm32f4_pwr_standby_pull(s, g->port, i); } else if (mode == 3) { o.analog = 1; } else { @@ -295,6 +297,13 @@ static void f4gpio_write(void *ctx, u32 off, int n, u32 v) esk_rf_hw(g->odr, odr); esk_rf_hw(g->bsrr, 0); } + if (g->brr && off - esk_rf_off(g->brr) < 4) { + u32 w = (n < 4 ? v & ((1u << (8 * n)) - 1) : v) << (8 * (off - esk_rf_off(g->brr))); + odr = g->odr->value & ~(u64)(w & 0xffffu); + if (odr != g->odr->value) + esk_rf_hw(g->odr, odr); + esk_rf_hw(g->brr, 0); + } update(g); } @@ -373,6 +382,7 @@ void *esk_stm32f4_gpio_create(struct esk_mach *s, struct esk_rf_periph *p) g.lckr = esk_rf_reg(p, "LCKR"); g.afrl = esk_rf_reg(p, "AFRL"); g.afrh = esk_rf_reg(p, "AFRH"); + g.brr = esk_rf_reg(p, "BRR"); if (!g.moder || !g.otyper || !g.ospeedr || !g.pupdr || !g.idr || !g.odr || !g.bsrr || !g.lckr || !g.afrl || !g.afrh || strncmp(p->name, "GPIO", 4) || p->name[4] < 'A' || p->name[4] > 'K' || p->name[5]) diff --git a/core/mcu/stm32/pwr_f4.c b/core/mcu/stm32/pwr_f4.c index 0b0882e46..e3f14a56f 100644 --- a/core/mcu/stm32/pwr_f4.c +++ b/core/mcu/stm32/pwr_f4.c @@ -143,8 +143,10 @@ static void standby_ends(struct esk_mach *m) void esk_stm32f4_pwr_wakeup(struct esk_mach *m) { struct pwr *w = f4_pwr(m); - if (!w) + if (!w) { + esk_stm32g4_pwr_wakeup(m); /* a G4's internal wake-up line */ return; + } csr_set(w, w->csr->value | CSR_WUF); if (w->mode == STANDBY) standby_ends(m); @@ -167,7 +169,9 @@ u32 esk_stm32f4_pwr_wkup_mask(struct esk_mach *m, int port) struct pwr *w = f4_pwr(m); u32 mask = 0; int pin; - if (!w || (port != 0 && port != 2)) + if (!w) + return esk_stm32g4_pwr_wkup_mask(m, port); + if (port != 0 && port != 2) return 0; for (pin = 0; pin < 16; pin++) if (wkup_bit(port, pin) && (w->csr->value & wkup_bit(port, pin))) @@ -177,6 +181,10 @@ u32 esk_stm32f4_pwr_wkup_mask(struct esk_mach *m, int port) void esk_stm32f4_pwr_pin_edge(struct esk_mach *m, int port, int pin, int level) { + if (esk_stm32g4_pwr(m)) { + esk_stm32g4_pwr_pin_edge(m, port, pin, level); + return; + } if (level && esk_stm32f4_pwr_wkup_pin(m, port, pin)) esk_stm32f4_pwr_wakeup(m); } @@ -184,7 +192,16 @@ void esk_stm32f4_pwr_pin_edge(struct esk_mach *m, int port, int pin, int level) int esk_stm32f4_pwr_standby(struct esk_mach *m) { struct pwr *w = f4_pwr(m); - return w && w->mode == STANDBY; + if (!w) + return esk_stm32g4_pwr_standby(m); + return w->mode == STANDBY; +} + +int esk_stm32f4_pwr_standby_pull(struct esk_mach *m, int port, int pin) +{ + if (esk_stm32g4_pwr(m)) + return esk_stm32g4_pwr_standby_pull(m, port, pin); + return (esk_stm32f4_pwr_wkup_mask(m, port) >> pin & 1u) ? 2 : 0; } /* a WKUP pin's level as its port reads it */ diff --git a/core/mcu/stm32/pwr_g4.c b/core/mcu/stm32/pwr_g4.c new file mode 100644 index 000000000..bbf5b94a5 --- /dev/null +++ b/core/mcu/stm32/pwr_g4.c @@ -0,0 +1,408 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* Copyright 2026 Junior Deogracias */ +/* pwr_g4.c -- the STM32G4's power control (RM0440 6), over the register + * file. + * + * - the voltage ranges: CR1.VOS 01 range 1 (CR5.R1MODE 0 its boost mode, + * to 170 MHz; 1 normal, to 150 MHz), 10 range 2 (26 MHz); the RCC model + * says when SYSCLK or the flash's wait states do not fit (rcc_g4.c). + * SR2.VOSF reads 0: the regulator is taken to settle at once; + * - low-power run: CR1.LPR puts the regulator in low-power mode, SR2's + * REGLPF follows it; REGLPS reads 1 (the low-power regulator ready); + * - the programmable voltage detector: with CR2.PVDE, SR2.PVDO is 1 while + * VDD is below the threshold PLS selects (2.0 to 2.9 V), or with PLS + * 111 while PVD_IN (PB7) is below VREFINT (1.212 V); its changes are + * EXTI line 16's input; the peripheral voltage monitors' outputs + * (PVMOx) read 0, VDDA being at VDD; + * - DBP (CR1) allows writes to the backup domain (RCC's BDCR, rcc_g4.c); + * - the wake-up pins WKUP1 to WKUP5 (PA0, PC13, PE6, PA2, PC5) with + * CR3.EWUPx: an edge of the polarity CR4.WPx gives (0 rising, 1 + * falling) sets SR1.WUFx; in Standby and Shutdown each enabled pin is + * an input with a pull-down (WPx 0) or a pull-up (WPx 1); + * - SCR's CWUFx and CSBF clear WUFx and SBF. + * + * The low-power modes (RM0440 6.3): the core's WFI or WFE with SLEEPDEEP + * set enters the mode CR1.LPMS gives: + * - Stop 0 (000) or Stop 1 (001): the core's domain's clocks stop but + * the RTC's and the IWDG's; HSE and the PLL turn off (rcc_g4.c); RAM, + * the registers and the pins keep their state; any EXTI line's + * interrupt or event wakes the core, on HSI16; + * - Standby (011): the core's domain is off. RAM is lost but SRAM2 while + * CR3.RRS keeps it; the pins let go, those CR3.APC applies keeping the + * pull-up or pull-down PUCRx or PDCRx gives them, the enabled wake-up + * pins their pull; a wake-up pin's edge, an RTC or TAMP event with its + * interrupt enabled (CR3.EIWUL, the internal wake-up line), NRST or the + * IWDG ends it with a reset of all but the backup domain, SR1.SBF set; + * - Shutdown (1xx): as Standby, SRAM2 lost too and no SBF; leaving it is + * a brownout reset (RCC_CSR's BORRSTF, rcc_g4.c). + * A wake-up flag already set as Standby or Shutdown is entered ends it + * at once. The option bytes' nRST_STOP, nRST_STDBY or nRST_SHDW cleared + * (FLASH_OPTR) makes entering that mode a reset instead (LPWRRSTF). + * + * Not modelled: the regulator's settling (VOSF never set) and the wake-up + * times (the core runs at the wake-up event), the low-power run and Stop + * modes' supply currents, the PVD's hysteresis and the PVMs' thresholds + * (VDDA is VDD here), the USB Type-C dead-battery bits (UCPD1_DBDIS, + * UCPD1_STDBY), VBAT charging (CR4.VBE, VBRS), the PVD thresholds as + * DS12288 gives them per part (their typical values here: 2.0, 2.2, 2.4, + * 2.5, 2.6, 2.8, 2.9 V). */ +#include "mcu/stm32/stm32.h" + +#define CR1_LPMS 7u +#define CR1_DBP (1u << 8) +#define CR1_LPR (1u << 14) +#define CR2_PVDE (1u << 0) +#define CR3_RRS (1u << 8) +#define CR3_APC (1u << 10) +#define CR3_EIWUL (1u << 15) +#define SR1_SBF (1u << 8) +#define SR1_WUFI (1u << 15) +#define SR2_REGLPS (1u << 8) +#define SR2_REGLPF (1u << 9) +#define SR2_PVDO (1u << 11) +/* FLASH_OPTR's user options (RM0440 5.7.6) */ +#define OPT_NRST_STOP (1u << 12) +#define OPT_NRST_STDBY (1u << 13) +#define OPT_NRST_SHDW (1u << 14) + +#define SRAM2_BASE 0x20014000u +#define SRAM2_SIZE 0x4000u + +enum { RUN, STOP, STANDBY, SHUTDOWN }; + +/* the wake-up pins: port, pin */ +static const int wkup_pin[5][2] = { { 0, 0 }, { 2, 13 }, { 4, 6 }, { 0, 2 }, { 2, 5 } }; + +struct g4pwr { + struct esk_mach *s; + struct esk_rf_periph *p; + struct esk_rf_reg *cr1, *cr2, *cr3, *cr4, *sr1, *sr2, *scr, *pucr[7], *pdcr[7]; + int mode, was_shutdown; + u64 sr1_was; + int pvdo; + int level[5]; /* each wake-up pin's level as last seen, -1 unknown */ +}; + +static struct g4pwr *g4pwr(struct esk_mach *m) +{ + struct esk_rf_periph *p = m && m->rf ? esk_rf_periph(m->rf, "PWR") : 0; + return p && p->ops == &esk_stm32g4_pwr_ops ? (struct g4pwr *)p->ctx : 0; +} + +int esk_stm32g4_pwr(struct esk_mach *m) +{ + return g4pwr(m) != 0; +} + +int esk_stm32g4_pwr_was_shutdown(struct esk_mach *m) +{ + struct g4pwr *w = g4pwr(m); + return w && w->mode == SHUTDOWN; +} + +static void sr1_set(struct g4pwr *w, u64 v) +{ + if (v != w->sr1->value) + esk_rf_hw(w->sr1, v); + w->sr1_was = v; +} + +/* ---- the PVD ------------------------------------------------------------- */ + +static int pin_volts(struct esk_mach *m, int port, int bit, double *v) +{ + return m->host.pin_volts && m->host.pin_volts(m->host.ctx, port, bit, v); +} + +static void pvd(struct g4pwr *w) +{ + static const double th[7] = { 2.0, 2.2, 2.4, 2.5, 2.6, 2.8, 2.9 }; + struct esk_mach *m = w->s; + u32 cr2 = (u32)w->cr2->value, pls = cr2 >> 1 & 7; + int o = 0; + u64 v; + if (cr2 & CR2_PVDE) { + double vdd = m->vdd > 0.0 ? m->vdd : 3.3, in; + if (pls < 7) + o = vdd < th[pls]; + else + o = pin_volts(m, 1, 7, &in) && in < 1.212; + } + v = (w->sr2->value & ~(u64)(SR2_PVDO | SR2_REGLPF | 0xF000u)) | SR2_REGLPS; + if (o) + v |= SR2_PVDO; + if (w->cr1->value & CR1_LPR) + v |= SR2_REGLPF; + if (v != w->sr2->value) + esk_rf_hw(w->sr2, v); + if (o != w->pvdo) { + w->pvdo = o; + esk_stm32_exti_input(m, 16, o); + } +} + +/* ---- wake-up -------------------------------------------------------------- */ + +static void standby_ends(struct esk_mach *m) +{ + if (m->reset_req) + return; + m->reset_cause = ESK_RESET_STANDBY; + m->reset_req = 1; + m->yield = 1; +} + +/* an internal wake-up event (the RTC's or TAMP's, its interrupt enabled) */ +void esk_stm32g4_pwr_wakeup(struct esk_mach *m) +{ + struct g4pwr *w = g4pwr(m); + if (!w || !(w->cr3->value & CR3_EIWUL)) + return; + sr1_set(w, w->sr1->value | SR1_WUFI); + if (w->mode == STANDBY || w->mode == SHUTDOWN) + standby_ends(m); +} + +static int wkup_of(int port, int pin) +{ + int k; + for (k = 0; k < 5; k++) + if (wkup_pin[k][0] == port && wkup_pin[k][1] == pin) + return k; + return -1; +} + +u32 esk_stm32g4_pwr_wkup_mask(struct esk_mach *m, int port) +{ + struct g4pwr *w = g4pwr(m); + u32 mask = 0; + int k; + if (!w) + return 0; + for (k = 0; k < 5; k++) + if (wkup_pin[k][0] == port && (w->cr3->value >> k & 1)) + mask |= 1u << wkup_pin[k][1]; + return mask; +} + +int esk_stm32g4_pwr_standby(struct esk_mach *m) +{ + struct g4pwr *w = g4pwr(m); + return w && (w->mode == STANDBY || w->mode == SHUTDOWN); +} + +/* the pull a pin has in Standby or Shutdown: 1 up, 2 down, 0 none */ +int esk_stm32g4_pwr_standby_pull(struct esk_mach *m, int port, int pin) +{ + struct g4pwr *w = g4pwr(m); + int k = wkup_of(port, pin); + if (!w) + return 0; + if (k >= 0 && (w->cr3->value >> k & 1)) + return (w->cr4->value >> k & 1) ? 1 : 2; + if ((w->cr3->value & CR3_APC) && port >= 0 && port < 7) { + if (w->pucr[port] && (w->pucr[port]->value >> pin & 1)) + return 1; + if (w->pdcr[port] && (w->pdcr[port]->value >> pin & 1)) + return 2; + } + return 0; +} + +void esk_stm32g4_pwr_pin_edge(struct esk_mach *m, int port, int pin, int level) +{ + struct g4pwr *w = g4pwr(m); + int k = wkup_of(port, pin); + if (!w || k < 0) + return; + if (w->level[k] == level) + return; + w->level[k] = level; + if (!(w->cr3->value >> k & 1)) + return; + if (level == !((w->cr4->value >> k) & 1)) { /* WPx 0: rising; 1: falling */ + sr1_set(w, w->sr1->value | (1u << k)); + if (w->mode == STANDBY || w->mode == SHUTDOWN) + standby_ends(m); + } +} + +/* ---- Stop, Standby and Shutdown -------------------------------------------- */ + +static int allowed(struct esk_mach *m, u32 opt) +{ + struct esk_rf_periph *f = esk_rf_periph(m->rf, "FLASH"); + struct esk_rf_reg *optr = f ? esk_rf_reg(f, "OPTR") : 0; + return !optr || (optr->value & opt) != 0; +} + +/* RAM lost, but [keep, keep + n) */ +static void ram_lost(struct esk_mach *m, u32 keep, u32 n) +{ + int r; + for (r = 0; r < m->bus.nrg; r++) { + struct esk_region *g = &m->bus.rg[r]; + u32 a; + if (g->kind != ESK_MEM_RAM || g->mirror || !g->mem) + continue; + if (!n || keep + n <= g->base || keep >= g->base + g->size) { + esk_bus_erase(g); + continue; + } + for (a = 0; a + 4 <= g->size; a += 4) + if (g->base + a < keep || g->base + a >= keep + n) + esk_mem_wr_le(g->mem + a, 4, g->erased); + g->gen++; + } +} + +static void deep_sleep(struct esk_mach *m) +{ + struct g4pwr *w = g4pwr(m); + u32 lpms, opt; + if (!w || w->mode != RUN) + return; + esk_mach_sync(m); + lpms = (u32)w->cr1->value & CR1_LPMS; + opt = lpms <= 1 ? OPT_NRST_STOP : lpms == 3 ? OPT_NRST_STDBY : lpms & 4 ? OPT_NRST_SHDW : OPT_NRST_STOP; + if (!allowed(m, opt)) { + esk_rf_diag(m, ES_SEV_INFO, "mcu.low_power_reset", "%s", + opt == OPT_NRST_STOP ? "the option bytes' nRST_STOP is 0: entering Stop resets the part" + : opt == OPT_NRST_STDBY ? "the option bytes' nRST_STDBY is 0: entering Standby resets the part" + : "the option bytes' nRST_SHDW is 0: entering Shutdown resets the part"); + if (!m->reset_req) { + m->reset_cause = ESK_RESET_LOW_POWER; + m->reset_req = 1; + m->yield = 1; + } + return; + } + esk_stm32g4_rcc_stop(m, 1); + if (lpms <= 1 || lpms == 2) { /* 010 is reserved: taken as Stop 1 */ + w->mode = STOP; + esk_mach_clocks(m, 1); + return; + } + w->mode = lpms == 3 ? STANDBY : SHUTDOWN; + if (w->mode == STANDBY && (w->cr3->value & CR3_RRS)) + ram_lost(m, SRAM2_BASE, SRAM2_SIZE); + else + ram_lost(m, 0, 0); + m->powered_down = 1; + esk_mach_clocks(m, 1); + esk_stm32f4_pins_changed(m); /* they let go */ + if (w->sr1->value & (0x1Fu | SR1_WUFI)) + standby_ends(m); +} + +static void deep_wake(struct esk_mach *m) +{ + struct g4pwr *w = g4pwr(m); + if (w && (w->mode == STANDBY || w->mode == SHUTDOWN)) { + m->asleep = 1; /* only a reset ends them */ + return; + } + if (w) + w->mode = RUN; + esk_mach_clocks(m, 0); +} + +/* ---- the registers ----------------------------------------------------------------- */ + +static u32 pwr_read(void *ctx, u32 off, int n) +{ + struct g4pwr *w = (struct g4pwr *)ctx; + if (off == esk_rf_off(w->sr2)) + pvd(w); + return esk_rf_read(w->p, off, n); +} + +static void pwr_write(void *ctx, u32 off, int n, u32 v) +{ + struct g4pwr *w = (struct g4pwr *)ctx; + struct esk_mach *m = w->s; + u64 cr3 = w->cr3->value, cr4 = w->cr4->value, cr1 = w->cr1->value, cr5 = 0; + struct esk_rf_reg *r5 = esk_rf_reg(w->p, "CR5"); + if (r5) + cr5 = r5->value; + esk_rf_write(w->p, off, n, v); + if (w->scr && off == esk_rf_off(w->scr)) { + u64 clear = (w->scr->value & 0x1Fu) | ((w->scr->value & 0x100u) ? SR1_SBF : 0u); + esk_rf_hw(w->scr, 0); + sr1_set(w, w->sr1->value & ~clear); + if (clear & 0x1Fu) + esk_rf_hw(w->sr1, w->sr1->value & ~(u64)SR1_WUFI); + } + pvd(w); + if (((cr1 ^ w->cr1->value) >> 9 & 3) || (r5 && ((cr5 ^ r5->value) & 0x100u))) + esk_stm32g4_rcc_check(m); + if ((cr3 ^ w->cr3->value) & (0x1Fu | CR3_APC) || (cr4 ^ w->cr4->value) & 0x1Fu) { + int port; + for (port = 0; port < 7; port++) + esk_stm32f4_port_changed(m, port); /* the wake-up pins' pulls */ + } +} + +static void pwr_reset(void *ctx) +{ + struct g4pwr *w = (struct g4pwr *)ctx; + struct esk_mach *m = w->s; + u64 keep = 0; + int k; + if (m->reset_cause == ESK_RESET_STANDBY && w->mode == STANDBY) + keep = (w->sr1_was & 0x801Fu) | SR1_SBF; + else if (m->reset_cause == ESK_RESET_STANDBY) + keep = w->sr1_was & 0x801Fu; /* Shutdown: no SBF */ + else if (m->reset_cause != ESK_RESET_POWER) + keep = w->sr1_was & SR1_SBF; + w->was_shutdown = w->mode == SHUTDOWN; + w->mode = RUN; + w->pvdo = 0; + for (k = 0; k < 5; k++) + w->level[k] = -1; + esk_rf_hw(w->sr1, keep); + w->sr1_was = keep; + pvd(w); +} + +const struct esk_dev_ops esk_stm32g4_pwr_ops = { "stm32g4-pwr", pwr_read, pwr_write, pwr_reset, 0, 0 }; + +void *esk_stm32g4_pwr_create(struct esk_mach *m, struct esk_rf_periph *p) +{ + struct g4pwr *w; + char name[8]; + int k; + if (!esk_rf_reg(p, "CR1") || !esk_rf_reg(p, "SR1") || !esk_rf_reg(p, "SCR") || !esk_rf_reg(p, "CR3") || + !esk_rf_reg(p, "CR4") || !esk_rf_reg(p, "SR2") || !esk_rf_reg(p, "CR2")) + return 0; + w = (struct g4pwr *)esk_mach_alloc(m, sizeof *w); + if (!w) + return 0; + w->s = m; + w->p = p; + w->cr1 = esk_rf_reg(p, "CR1"); + w->cr2 = esk_rf_reg(p, "CR2"); + w->cr3 = esk_rf_reg(p, "CR3"); + w->cr4 = esk_rf_reg(p, "CR4"); + w->sr1 = esk_rf_reg(p, "SR1"); + w->sr2 = esk_rf_reg(p, "SR2"); + w->scr = esk_rf_reg(p, "SCR"); + for (k = 0; k < 7; k++) { + name[0] = 'P'; + name[1] = 'U'; + name[2] = 'C'; + name[3] = 'R'; + name[4] = (char)('A' + k); + name[5] = 0; + w->pucr[k] = esk_rf_reg(p, name); + name[1] = 'D'; + w->pdcr[k] = esk_rf_reg(p, name); + } + for (k = 0; k < 5; k++) + w->level[k] = -1; + /* the flags read-only to the program, cleared through SCR */ + esk_rf_set_acc(w->sr1, 0x811Fu, ESK_ACC_RO); + m->deep_sleep = deep_sleep; + m->deep_wake = deep_wake; + return w; +} diff --git a/core/mcu/stm32/rcc.c b/core/mcu/stm32/rcc.c index 0c504e6b2..599a73dca 100644 --- a/core/mcu/stm32/rcc.c +++ b/core/mcu/stm32/rcc.c @@ -568,12 +568,16 @@ static u32 f4_core_hz(struct esk_mach *s) u32 esk_stm32_hclk(struct esk_mach *s) { struct rcc *c = any_rcc(s); + if (esk_stm32g4_rcc(s)) + return esk_stm32g4_hclk(s); return c && (c->f1 || c->f4) ? c->hclk : 0; } u32 esk_stm32_pclk(struct esk_mach *s, int apb) { struct rcc *c = any_rcc(s); + if (esk_stm32g4_rcc(s)) + return esk_stm32g4_pclk(s, apb); if (c && c->f4) return c->hclk / f4_ppre_div(c, apb); return esk_stm32f1_pclk(s, apb); @@ -583,6 +587,8 @@ u32 esk_stm32_timclk(struct esk_mach *s, int apb) { struct rcc *c = any_rcc(s); u32 d; + if (esk_stm32g4_rcc(s)) + return esk_stm32g4_timclk(s, apb); if (!c || !c->f4) { u32 p = esk_stm32f1_pclk(s, apb), h = esk_stm32f1_hclk(s); return p == h ? p : 2 * p; @@ -753,6 +759,10 @@ static void rcc_write(void *ctx, u32 off, int n, u32 v) void esk_stm32_rcc_lsi(struct esk_mach *s) { struct esk_rf_periph *p = s->rf ? esk_rf_periph(s->rf, "RCC") : 0; + if (esk_stm32g4_rcc(s)) { + esk_stm32g4_rcc_lsi(s); + return; + } if (p && p->ops == &esk_stm32_rcc_ops) lsi_forced((struct rcc *)p->ctx); } diff --git a/core/mcu/stm32/rcc_g4.c b/core/mcu/stm32/rcc_g4.c new file mode 100644 index 000000000..dfddfd7fd --- /dev/null +++ b/core/mcu/stm32/rcc_g4.c @@ -0,0 +1,919 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* Copyright 2026 Junior Deogracias */ +/* rcc_g4.c -- the STM32G4's reset and clock control (RM0440 7), over the + * register file. + * + * The clocks (RM0440 7.2): + * - HSI16 16 MHz (CR.HSION, out of reset), HSE the board's crystal or + * clock (esk_mach.hse_hz), ready only as the board drives OSC_IN: a + * crystal with HSEBYP clear, a clock with it set; LSI 32 kHz + * (CSR.LSION, or forced by the IWDG); LSE the board's 32.768 kHz + * crystal (BDCR.LSEON, not with LSEBYP); HSI48 48 MHz (CRRCR.HSI48ON); + * - each is ready its start-up time after it is turned on and its ready + * bit then sets (HSIRDY, HSERDY, LSIRDY, LSERDY, HSI48RDY); off, it is + * not ready at once. LSE keeps running through every reset but a + * power-on one, as the backup domain does; + * - the main PLL from HSI16 or HSE (PLLCFGR.PLLSRC 10, 11; 00 none): its + * VCO's input is the source over PLLM + 1, its output that times PLLN; + * PLLP the VCO over PLLPDIV (2 to 31), or 7 or 17 (PLLP) while PLLPDIV + * is 0; PLLQ and PLLR the VCO over 2, 4, 6 or 8; each output on while + * its PLLxEN is set; PLLRDY sets the PLL's lock time after PLLON with + * its source ready; + * - SYSCLK from HSI16 (SW 01), HSE (10) or PLLR (11, with PLLREN), + * switched once the source is ready (CFGR.SWS); HCLK over HPRE (1 to + * 512), PCLK1 and PCLK2 over PPRE1 and PPRE2 (1 to 16); the timers' + * clock is the APB's when its prescaler is 1, else twice it; + * - what the system clock uses cannot be turned off (RM0440 7.4.1: + * HSION, HSEON and PLLON stay set while used, directly or through the + * PLL), and HSEBYP keeps its value while HSE is on; + * - CIER, CIFR, CICR: a source that becomes ready with its RDYIE set sets + * its RDYF and makes the RCC interrupt pending; CICR's bits clear the + * flags (CICR reads 0); + * - the peripherals' kernel clocks as CCIPR and CCIPR2 select them + * (esk_stm32g4_kernel_hz: the U(S)ARTs and LPUART, the I2Cs, LPTIM1, + * the ADCs, the FDCANs, the 48 MHz clock, the QUADSPI, SAI1 and I2S); + * - MCO (CFGR.MCOSEL, MCOPRE) as a frequency (esk_stm32g4_mco_hz) for + * the pins' model; + * - BDCR is written only while PWR_CR1's DBP allows it; BDRST resets the + * backup domain (the RTC's and TAMP's registers); + * - what the datasheet forbids is said, once, as a warning + * (mcu.clock_out_of_spec): a VCO input outside 2.66 to 16 MHz or + * output outside 96 to 344 MHz, a PLL output above 170 MHz, SYSCLK + * above the voltage range's limit (PWR's: range 1 boost 170 MHz, range + * 1 normal 150, range 2 26); and too few flash wait states for HCLK + * (mcu.flash_wait_states, RM0440 table 9): the part would fetch wrong + * instructions, the model only warns. + * + * Resets (RM0440 7.1): a peripheral's bit in an *RSTR register set by a + * write resets it, its registers back to their reset values; CSR's flags + * record each reset: BORRSTF and PINRSTF at power-on; PINRSTF with every + * other (the part drives NRST low) and SFTRSTF, IWDGRSTF, WWDGRSTF, + * LPWRRSTF or OBLRSTF (the option bytes' reload) with its cause, the + * earlier flags kept until RMVF clears them; leaving Standby keeps them. + * BDCR keeps its value through every reset but a power-on one; LSIRDY sets + * while the IWDG runs, which forces LSI on. + * + * The start-up times, in DS12288's typical values: HSI16 0.8 us, an HSE + * crystal 2 ms (an external clock six of its periods), LSI 80 us, LSE 2 s, + * HSI48 2.5 us, the PLL's lock 15 us. + * + * Not modelled: the clock security systems (CSSON and LSECSSON are kept; + * the board's oscillators never fail), the start-up times' spread and + * their dependence on temperature, LSEDRV's drive strength, HSITRIM's and + * HSI48CAL's effect on the frequencies (the nominal frequencies always), + * the CRS's trimming of HSI48 (the CRS model's), a peripheral held in + * reset while its *RSTR bit stays set (its reset happens on the write), + * the brownout reset (BORRSTF only at power-on), the low-power modes' + * sleep enables (*SMENR: a peripheral's clock in Sleep is its run + * clock). */ +#include +#include + +#include "mcu/stm32/stm32.h" + +#define HSI_HZ 16000000u +#define LSI_HZ 32000u +#define HSI48_HZ 48000000u + +/* CR */ +#define HSION (1u << 8) +#define HSIRDY (1u << 10) +#define HSEON (1u << 16) +#define HSERDY (1u << 17) +#define HSEBYP (1u << 18) +#define PLLON (1u << 24) +#define PLLRDY (1u << 25) +/* CSR */ +#define LSION (1u << 0) +#define LSIRDY (1u << 1) +#define RMVF (1u << 23) +#define CSR_FLAGS 0xfe000000u +#define OBLRSTF (1u << 25) +#define PINRSTF (1u << 26) +#define BORRSTF (1u << 27) +#define SFTRSTF (1u << 28) +#define IWDGRSTF (1u << 29) +#define WWDGRSTF (1u << 30) +#define LPWRRSTF (1u << 31) +/* BDCR */ +#define LSEON (1u << 0) +#define LSERDY (1u << 1) +#define LSEBYP (1u << 2) +#define BDRST (1u << 16) +/* CRRCR */ +#define HSI48ON (1u << 0) +#define HSI48RDY (1u << 1) +/* PLLCFGR */ +#define PLLPEN (1u << 16) +#define PLLQEN (1u << 20) +#define PLLREN (1u << 24) + +#define PS_US 1000000ull + +/* the clock sources, the PLL after its sources */ +enum { O_HSI, O_HSE, O_PLL, O_LSI, O_LSE, O_HSI48, O_N }; +/* CIER/CIFR/CICR's bit for each */ +static const int osc_irq_bit[O_N] = { 3, 4, 5, 0, 1, 10 }; + +enum { W_VCO_IN = 1, W_VCO_OUT = 2, W_SYSCLK = 4, W_FLASH = 8, W_PLL_OUT = 16 }; + +struct g4rcc { + struct esk_mach *s; + struct esk_rf_periph *p; + struct esk_rf_reg *cr, *cfgr, *pllcfgr, *cier, *cifr, *cicr, *csr, *bdcr, *crrcr, *ccipr, *ccipr2; + struct osc { int ready, starting; u64 left_ps; } osc[O_N]; + int running, irq; + u64 since; + u32 hclk; + unsigned warned; + u32 csr_flags; + u64 bdcr_kept; + int obl; /* the coming reset is the option bytes' reload */ + struct rst { struct esk_rf_periph *q; struct esk_rf_reg *r; u64 m; } *rst; + int nrst; +}; + +static u32 bits(const struct esk_rf_reg *r, int lsb, int width) +{ + return r ? (u32)(r->value >> lsb) & ((1u << width) - 1) : 0; +} + +static void set_bit(u64 *v, u32 bit, int on) +{ + *v = on ? (*v | bit) : (*v & ~(u64)bit); +} + +static u32 g4_core_hz(struct esk_mach *s); + +static struct g4rcc *g4(struct esk_mach *s) +{ + return s && s->core_hz == g4_core_hz ? (struct g4rcc *)s->clock_ctx : 0; +} + +int esk_stm32g4_rcc(struct esk_mach *s) +{ + return g4(s) != 0; +} + +/* ---- frequencies -------------------------------------------------------- */ + +static u32 pll_src_hz(const struct g4rcc *c) +{ + u32 src = bits(c->pllcfgr, 0, 2); + return src == 2 ? HSI_HZ : src == 3 ? c->s->hse_hz : 0; +} + +static u32 vco_in(const struct g4rcc *c) +{ + return pll_src_hz(c) / (bits(c->pllcfgr, 4, 4) + 1); +} + +static u64 vco(const struct g4rcc *c) +{ + return (u64)vco_in(c) * bits(c->pllcfgr, 8, 7); +} + +/* the PLL's P, Q and R outputs ('P', 'Q', 'R'): 0 while it is not locked or + * the output is off */ +static u32 pll_out(const struct g4rcc *c, char which) +{ + u32 d; + if (!(c->cr->value & PLLRDY)) + return 0; + switch (which) { + case 'P': + if (!(c->pllcfgr->value & PLLPEN)) + return 0; + d = bits(c->pllcfgr, 27, 5); + if (d == 1) + return 0; /* reserved */ + if (!d) + d = bits(c->pllcfgr, 17, 1) ? 17 : 7; + break; + case 'Q': + if (!(c->pllcfgr->value & PLLQEN)) + return 0; + d = 2 * (bits(c->pllcfgr, 21, 2) + 1); + break; + default: + if (!(c->pllcfgr->value & PLLREN)) + return 0; + d = 2 * (bits(c->pllcfgr, 25, 2) + 1); + break; + } + return (u32)(vco(c) / d); +} + +static u32 sysclk_of(const struct g4rcc *c, u32 sw) +{ + return sw == 1 ? HSI_HZ : sw == 2 ? c->s->hse_hz : sw == 3 ? pll_out(c, 'R') : HSI_HZ; +} + +static u32 sysclk(const struct g4rcc *c) +{ + return sysclk_of(c, bits(c->cfgr, 2, 2)); +} + +static u32 hpre_div(u32 hpre) +{ + static const u32 d[8] = { 2, 4, 8, 16, 64, 128, 256, 512 }; + return hpre & 8 ? d[hpre & 7] : 1; +} + +static u32 ppre_div(const struct g4rcc *c, int apb) +{ + u32 v = bits(c->cfgr, apb == 2 ? 11 : 8, 3); + return v & 4 ? 2u << (v & 3) : 1; +} + +static u32 calc_hclk(const struct g4rcc *c) +{ + return sysclk(c) / hpre_div(bits(c->cfgr, 4, 4)); +} + +static int src_ready(const struct g4rcc *c, u32 sw) +{ + if (sw == 1) + return c->osc[O_HSI].ready; + if (sw == 2) + return c->osc[O_HSE].ready; + if (sw == 3) + return c->osc[O_PLL].ready && (c->pllcfgr->value & PLLREN); + return 0; +} + +static struct esk_rf_reg *other_reg(struct esk_mach *s, const char *periph, const char *reg) +{ + struct esk_rf_periph *p = s->rf ? esk_rf_periph(s->rf, periph) : 0; + return p ? esk_rf_reg(p, reg) : 0; +} + +/* ---- the datasheet's limits ----------------------------------------------- */ + +static void warn(struct g4rcc *c, unsigned w, const char *code, const char *fmt, u32 a, u32 b) +{ + char msg[200]; + if (c->warned & w) + return; + c->warned |= w; + snprintf(msg, sizeof msg, fmt, a, b); + esk_rf_diag(c->s, ES_SEV_WARNING, code, "%s", msg); +} + +/* PWR's voltage range: 1 boost, 1 normal or 2 (PWR_CR1.VOS, PWR_CR5.R1MODE) */ +static u32 range_limit(struct esk_mach *s, u32 *lim) +{ + struct esk_rf_reg *cr1 = other_reg(s, "PWR", "CR1"), *cr5 = other_reg(s, "PWR", "CR5"); + u32 vos = cr1 ? (u32)(cr1->value >> 9 & 3) : 1; + if (vos == 2) { + *lim = 26000000u; + return 2; + } + if (cr5 && !(cr5->value & (1u << 8))) { + *lim = 170000000u; + return 0; /* range 1 boost (R1MODE 0) */ + } + *lim = 150000000u; + return 1; +} + +/* RM0440 table 9: the highest HCLK each wait-state count allows */ +static u32 flash_limit(u32 range, u32 ws) +{ + static const u32 boost[5] = { 34, 68, 102, 136, 170 }, normal[5] = { 30, 60, 90, 120, 150 }, + r2[3] = { 12, 24, 26 }; + if (range == 2) + return ws < 3 ? r2[ws] * 1000000u : 26000000u; + if (ws > 4) + return 170000000u; + return (range == 0 ? boost[ws] : normal[ws]) * 1000000u; +} + +static void check(struct g4rcc *c) +{ + u32 lim, range = range_limit(c->s, &lim), sys = sysclk(c); + struct esk_rf_reg *acr = other_reg(c->s, "FLASH", "ACR"); + if (c->cr->value & PLLON) { + u32 in = vco_in(c); + u64 out = vco(c); + if (in && (in < 2660000u || in > 16000000u)) + warn(c, W_VCO_IN, "mcu.clock_out_of_spec", + "the PLL's VCO input is %u Hz, outside 2.66 to 16 MHz (DS12288)", in, 0); + if (out && (out < 96000000u || out > 344000000u)) + warn(c, W_VCO_OUT, "mcu.clock_out_of_spec", + "the PLL's VCO output is %u Hz, outside 96 to 344 MHz (DS12288)", (u32)out, 0); + if (pll_out(c, 'R') > 170000000u || pll_out(c, 'Q') > 170000000u || pll_out(c, 'P') > 170000000u) + warn(c, W_PLL_OUT, "mcu.clock_out_of_spec", "a PLL output is above 170 MHz (DS12288)", 0, 0); + } + if (sys > lim) + warn(c, W_SYSCLK, "mcu.clock_out_of_spec", "SYSCLK %u Hz is above the voltage range's %u Hz (RM0440 6.1.5)", + sys, lim); + if (acr && c->hclk > flash_limit(range, (u32)(acr->value & 15))) + warn(c, W_FLASH, "mcu.flash_wait_states", + "HCLK %u Hz needs more flash wait states than LATENCY %u (RM0440 table 9)", c->hclk, + (u32)(acr->value & 15)); +} + +void esk_stm32g4_rcc_check(struct esk_mach *s) +{ + struct g4rcc *c = g4(s); + if (c) { + c->warned &= ~(unsigned)(W_SYSCLK | W_FLASH); /* a new setting: said again if still wrong */ + check(c); + } +} + +/* ---- the oscillators' start-ups ---------------------------------------- */ + +static u64 startup_ps(const struct g4rcc *c, int i) +{ + switch (i) { + case O_HSI: return 800000ull; + case O_HSE: + if (c->s->hse_clock) + return c->s->hse_hz ? 6000000000000ull / c->s->hse_hz : 1; + return 2000ull * PS_US; + case O_PLL: return 15ull * PS_US; + case O_LSI: return 80ull * PS_US; + case O_LSE: return 2000000ull * PS_US; + default: return 2500000ull; /* HSI48 */ + } +} + +static void clock_run(struct g4rcc *c) +{ + int i, any = 0; + for (i = 0; i < O_N; i++) + any |= c->osc[i].starting; + if (any && !c->running) + c->since = c->s->cycles; + esk_rf_clock(c->p, &c->running, any); +} + +static void follow(struct g4rcc *c, int i, int want) +{ + struct osc *o = &c->osc[i]; + if (!want) { + o->ready = o->starting = 0; + } else if (!o->ready && !o->starting) { + o->starting = 1; + o->left_ps = startup_ps(c, i); + } +} + +static int ready_bit(const struct g4rcc *c, int i) +{ + switch (i) { + case O_HSI: return (c->cr->value & HSIRDY) != 0; + case O_HSE: return (c->cr->value & HSERDY) != 0; + case O_PLL: return (c->cr->value & PLLRDY) != 0; + case O_LSI: return c->csr && (c->csr->value & LSIRDY); + case O_LSE: return c->bdcr && (c->bdcr->value & LSERDY); + default: return c->crrcr && (c->crrcr->value & HSI48RDY); + } +} + +/* the ready bits, the clock in use; a new HCLK ends the quantum */ +static void settle(struct g4rcc *c) +{ + u64 cr = c->cr->value, v; + u32 sws = bits(c->cfgr, 2, 2), sw = bits(c->cfgr, 0, 2), src = bits(c->pllcfgr, 0, 2), h; + int want[O_N], i, hse_ok; + unsigned was = 0; + for (i = 0; i < O_N; i++) + if (ready_bit(c, i)) + was |= 1u << i; + /* what the system clock uses cannot be turned off */ + if (sws == 1 || (sws == 3 && src == 2)) + cr |= HSION; + if (sws == 2 || (sws == 3 && src == 3)) + cr |= HSEON; + if (sws == 3) + cr |= PLLON; + hse_ok = c->s->hse_hz && ((cr & HSEBYP) != 0) == (c->s->hse_clock != 0); + want[O_HSI] = (cr & HSION) != 0; + want[O_HSE] = (cr & HSEON) && hse_ok; + want[O_LSI] = c->csr && ((c->csr->value & LSION) || esk_stm32_iwdg_running(c->s)); + want[O_LSE] = c->bdcr && (c->bdcr->value & LSEON) && c->s->lse_hz && !(c->bdcr->value & LSEBYP); + want[O_HSI48] = c->crrcr && (c->crrcr->value & HSI48ON); + for (i = 0; i < O_N; i++) { + if (i == O_PLL) { + int src_ok = src == 2 ? c->osc[O_HSI].ready : src == 3 ? c->osc[O_HSE].ready : 0; + want[O_PLL] = (cr & PLLON) && src_ok; + } + follow(c, i, want[i]); + } + set_bit(&cr, HSIRDY, c->osc[O_HSI].ready); + set_bit(&cr, HSERDY, c->osc[O_HSE].ready); + set_bit(&cr, PLLRDY, c->osc[O_PLL].ready); + if (cr != c->cr->value) + esk_rf_hw(c->cr, cr); + if (c->csr) { + v = c->csr->value; + set_bit(&v, LSIRDY, c->osc[O_LSI].ready); + if (v != c->csr->value) + esk_rf_hw(c->csr, v); + } + if (c->bdcr) { + v = c->bdcr->value; + set_bit(&v, LSERDY, c->osc[O_LSE].ready); + if (v != c->bdcr->value) + esk_rf_hw(c->bdcr, v); + } + if (c->crrcr) { + v = c->crrcr->value; + set_bit(&v, HSI48RDY, c->osc[O_HSI48].ready); + if (v != c->crrcr->value) + esk_rf_hw(c->crrcr, v); + } + /* CIFR: a source that has become ready with its interrupt enabled */ + for (i = 0; i < O_N; i++) + if (c->osc[i].ready && !(was >> i & 1) && c->cier && c->cifr) { + u64 f = (u64)1 << osc_irq_bit[i]; + if ((c->cier->value & f) && !(c->cifr->value & f)) { + esk_rf_hw(c->cifr, c->cifr->value | f); + if (c->irq >= 0) + esk_rf_interrupt(c->p, c->irq); + } + } + clock_run(c); + if (sw != sws && src_ready(c, sw)) + esk_rf_hw(c->cfgr, (c->cfgr->value & ~(u64)0xC) | (u64)sw << 2); + else if (sws == 3 && !src_ready(c, 3)) + esk_rf_hw(c->cfgr, (c->cfgr->value & ~(u64)0xF) | 5u); /* the PLL lost: back to HSI16 */ + h = calc_hclk(c); + if (h != c->hclk) { + c->hclk = h; + c->s->yield = 1; + } + check(c); +} + +/* ---- the clocks other models ask for --------------------------------------- */ + +static u32 g4_core_hz(struct esk_mach *s) +{ + struct g4rcc *c = g4(s); + return c ? c->hclk : 0; +} + +u32 esk_stm32g4_hclk(struct esk_mach *s) +{ + struct g4rcc *c = g4(s); + return c ? c->hclk : 0; +} + +u32 esk_stm32g4_pclk(struct esk_mach *s, int apb) +{ + struct g4rcc *c = g4(s); + return c ? c->hclk / ppre_div(c, apb) : 0; +} + +u32 esk_stm32g4_timclk(struct esk_mach *s, int apb) +{ + struct g4rcc *c = g4(s); + u32 d; + if (!c) + return 0; + d = ppre_div(c, apb); + return d == 1 ? c->hclk : 2 * (c->hclk / d); +} + +u32 esk_stm32g4_sysclk(struct esk_mach *s) +{ + struct g4rcc *c = g4(s); + return c ? sysclk(c) : 0; +} + +int esk_stm32g4_osc_ready(struct esk_mach *s, char which) +{ + struct g4rcc *c = g4(s); + if (!c) + return 0; + switch (which) { + case 'H': return c->osc[O_HSI].ready; + case 'E': return c->osc[O_HSE].ready; + case 'I': return c->osc[O_LSI].ready; + case 'L': return c->osc[O_LSE].ready; + case '4': return c->osc[O_HSI48].ready; + default: return 0; + } +} + +u32 esk_stm32g4_pll_hz(struct esk_mach *s, char which) +{ + struct g4rcc *c = g4(s); + return c ? pll_out(c, which) : 0; +} + +/* a 2-bit CCIPR selection of PCLK (00), SYSCLK (01), HSI16 (10), LSE (11) */ +static u32 sel_pclk_sys_hsi_lse(const struct g4rcc *c, u32 sel, int apb) +{ + switch (sel) { + case 0: return c->hclk / ppre_div(c, apb); + case 1: return sysclk(c); + case 2: return c->osc[O_HSI].ready ? HSI_HZ : 0; + default: return c->osc[O_LSE].ready ? c->s->lse_hz : 0; + } +} + +u32 esk_stm32g4_kernel_hz(struct esk_mach *s, const char *periph) +{ + struct g4rcc *c = g4(s); + u32 sel; + if (!c || !periph) + return 0; + if (!strcmp(periph, "USART1")) + return sel_pclk_sys_hsi_lse(c, bits(c->ccipr, 0, 2), 2); + if (!strcmp(periph, "USART2")) + return sel_pclk_sys_hsi_lse(c, bits(c->ccipr, 2, 2), 1); + if (!strcmp(periph, "USART3")) + return sel_pclk_sys_hsi_lse(c, bits(c->ccipr, 4, 2), 1); + if (!strcmp(periph, "UART4")) + return sel_pclk_sys_hsi_lse(c, bits(c->ccipr, 6, 2), 1); + if (!strcmp(periph, "UART5")) + return sel_pclk_sys_hsi_lse(c, bits(c->ccipr, 8, 2), 1); + if (!strcmp(periph, "LPUART1")) + return sel_pclk_sys_hsi_lse(c, bits(c->ccipr, 10, 2), 1); + if (!strncmp(periph, "I2C", 3)) { + int k = periph[3] - '0'; + sel = k == 4 ? bits(c->ccipr2, 0, 2) : k >= 1 && k <= 3 ? bits(c->ccipr, 12 + 2 * (k - 1), 2) : 0; + return sel == 3 ? 0 : sel_pclk_sys_hsi_lse(c, sel, 1); + } + if (!strcmp(periph, "LPTIM1")) { + sel = bits(c->ccipr, 18, 2); + return sel == 0 ? c->hclk / ppre_div(c, 1) + : sel == 1 ? (c->osc[O_LSI].ready ? LSI_HZ : 0) + : sel == 2 ? (c->osc[O_HSI].ready ? HSI_HZ : 0) + : (c->osc[O_LSE].ready ? c->s->lse_hz : 0); + } + if (!strcmp(periph, "SAI1") || !strcmp(periph, "I2S23")) { + sel = bits(c->ccipr, !strcmp(periph, "SAI1") ? 20 : 22, 2); + return sel == 0 ? sysclk(c) : sel == 1 ? pll_out(c, 'Q') : sel == 3 ? (c->osc[O_HSI].ready ? HSI_HZ : 0) : 0; + } + if (!strncmp(periph, "FDCAN", 5)) { + sel = bits(c->ccipr, 24, 2); + return sel == 0 ? (c->osc[O_HSE].ready ? c->s->hse_hz : 0) : sel == 1 ? pll_out(c, 'Q') + : sel == 2 ? c->hclk / ppre_div(c, 1) : 0; + } + if (!strcmp(periph, "CLK48")) { + sel = bits(c->ccipr, 26, 2); + return sel == 0 ? (c->osc[O_HSI48].ready ? HSI48_HZ : 0) : sel == 2 ? pll_out(c, 'Q') : 0; + } + if (!strcmp(periph, "ADC12") || !strcmp(periph, "ADC345")) { + sel = bits(c->ccipr, !strcmp(periph, "ADC12") ? 28 : 30, 2); + return sel == 1 ? pll_out(c, 'P') : sel == 2 ? sysclk(c) : 0; + } + if (!strcmp(periph, "QUADSPI")) { + sel = bits(c->ccipr2, 20, 2); + return sel == 0 ? sysclk(c) : sel == 1 ? (c->osc[O_HSI].ready ? HSI_HZ : 0) : sel == 2 ? pll_out(c, 'Q') : 0; + } + if (!strcmp(periph, "RTC")) { + sel = c->bdcr ? (u32)(c->bdcr->value >> 8 & 3) : 0; + return sel == 1 ? (c->osc[O_LSE].ready ? c->s->lse_hz : 0) : sel == 2 ? (c->osc[O_LSI].ready ? LSI_HZ : 0) + : sel == 3 ? (c->osc[O_HSE].ready ? c->s->hse_hz / 32 : 0) : 0; + } + return 0; +} + +u32 esk_stm32g4_mco_hz(struct esk_mach *s) +{ + struct g4rcc *c = g4(s); + u32 sel, pre, hz; + if (!c) + return 0; + sel = bits(c->cfgr, 24, 4); + pre = bits(c->cfgr, 28, 3); + switch (sel) { + case 1: hz = sysclk(c); break; + case 3: hz = c->osc[O_HSI].ready ? HSI_HZ : 0; break; + case 4: hz = c->osc[O_HSE].ready ? c->s->hse_hz : 0; break; + case 5: hz = pll_out(c, 'R') ? (u32)(vco(c) / (2 * (bits(c->pllcfgr, 25, 2) + 1))) : 0; break; + case 6: hz = c->osc[O_LSI].ready ? LSI_HZ : 0; break; + case 7: hz = c->osc[O_LSE].ready ? c->s->lse_hz : 0; break; + case 8: hz = c->osc[O_HSI48].ready ? HSI48_HZ : 0; break; + default: hz = 0; break; + } + return pre <= 4 ? hz >> pre : 0; +} + +/* ---- Stop and Standby -------------------------------------------------------- */ + +void esk_stm32g4_rcc_stop(struct esk_mach *s, int wake_hsi) +{ + struct g4rcc *c = g4(s); + u64 cr; + if (!c) + return; + esk_stm32_rtc_sync(s); + /* RM0440 7.2.7: HSE and the PLL stop; the part wakes on HSI16 (STOPWUCK + * is the G4's HSI16 only) */ + cr = c->cr->value & ~(u64)(HSEON | PLLON); + (void)wake_hsi; + esk_rf_hw(c->cr, cr | HSION); + esk_rf_hw(c->cfgr, (c->cfgr->value & ~(u64)0xF) | 5u); + settle(c); + esk_stm32_rtc_sync(s); +} + +void esk_stm32g4_rcc_obl(struct esk_mach *s) +{ + struct g4rcc *c = g4(s); + if (c) + c->obl = 1; +} + +/* ---- the device -------------------------------------------------------------- */ + +static u32 tick_hz(const struct g4rcc *c) { return c->hclk >= 1000u ? c->hclk : HSI_HZ; } + +static void rcc_tick(void *ctx, u32 cycles) +{ + struct g4rcc *c = (struct g4rcc *)ctx; + u64 ps; + int i, done = 0; + if (!c->running) + return; + if (c->since > c->s->cycles) + c->since = 0; + cycles = esk_mach_after(c->s, cycles, c->since); + c->since = 0; + ps = (u64)cycles * 1000000000ull / (tick_hz(c) / 1000u); + for (i = 0; i < O_N; i++) { + struct osc *o = &c->osc[i]; + if (!o->starting) + continue; + if (o->left_ps <= ps) { + o->starting = 0; + o->ready = 1; + done = 1; + } else { + o->left_ps -= ps; + } + } + if (done) { + esk_stm32_rtc_sync(c->s); + settle(c); + esk_stm32_rtc_sync(c->s); + c->s->yield = 1; + } else { + clock_run(c); + } +} + +static int rcc_next(void *ctx, u32 *cycles) +{ + struct g4rcc *c = (struct g4rcc *)ctx; + u64 best = ~(u64)0, k = tick_hz(c) / 1000u; + int i; + if (!c->running) + return 0; + for (i = 0; i < O_N; i++) + if (c->osc[i].starting) { + u64 n = (c->osc[i].left_ps * k + 999999999ull) / 1000000000ull; + if (n < best) + best = n; + } + if (best == ~(u64)0) + return 0; + *cycles = best == 0 ? 1 : best > 0xffffffffu ? 0xffffffffu : (u32)best; + return 1; +} + +static u32 rcc_read(void *ctx, u32 off, int n) +{ + struct g4rcc *c = (struct g4rcc *)ctx; + return esk_rf_read(c->p, off, n); +} + +static void lsi_forced(struct g4rcc *c) +{ + if (esk_stm32_iwdg_running(c->s) && !c->osc[O_LSI].ready && !c->osc[O_LSI].starting) + settle(c); +} + +static void rcc_write(void *ctx, u32 off, int n, u32 v) +{ + struct g4rcc *c = (struct g4rcc *)ctx; + int i; + esk_stm32_rtc_sync(c->s); + if (c->bdcr && off - esk_rf_off(c->bdcr) < 4) { + struct esk_rf_reg *pcr = other_reg(c->s, "PWR", "CR1"); + if (pcr && !(pcr->value & (1u << 8))) + return; /* DBP clear: the backup domain is write-protected */ + } + if (c->csr && off - esk_rf_off(c->csr) < 4 && (v & RMVF)) { + c->csr_flags = 0; + v &= ~CSR_FLAGS; + esk_rf_hw(c->csr, c->csr->value & ~(u64)CSR_FLAGS); + } + if (c->bdcr && off - esk_rf_off(c->bdcr) < 4 && (v & BDRST)) { + static const char *const dom[2] = { "RTC", "TAMP" }; + int k; + for (k = 0; k < 2; k++) { + struct esk_rf_periph *q = esk_rf_periph(c->s->rf, dom[k]); + if (q) { + int keep = q->backup; + q->backup = 0; + esk_rf_periph_reset(q); + q->backup = keep; + } + } + } + if (c->cicr && off - esk_rf_off(c->cicr) < 4) { + if (c->cifr) + esk_rf_hw(c->cifr, c->cifr->value & ~(u64)(v & 0x7bbu)); + return; /* CICR reads 0 */ + } + if (off - esk_rf_off(c->cr) < 4) { + u64 was = c->cr->value; + esk_rf_write(c->p, off, n, v); + if (was & (HSEON | HSERDY)) /* HSEBYP kept while HSE is on */ + esk_rf_hw(c->cr, (c->cr->value & ~(u64)HSEBYP) | (was & HSEBYP)); + } else { + esk_rf_write(c->p, off, n, v); + } + if (c->csr && (c->csr->value & RMVF)) + esk_rf_hw(c->csr, c->csr->value & ~(u64)RMVF); + if (c->bdcr && (c->bdcr->value & BDRST) && off - esk_rf_off(c->bdcr) < 4) { + esk_rf_hw(c->bdcr, c->bdcr->value & BDRST); /* the domain's reset: all else cleared */ + c->osc[O_LSE].ready = c->osc[O_LSE].starting = 0; + } + for (i = 0; i < c->nrst; i++) + if (off - esk_rf_off(c->rst[i].r) < 4 && (c->rst[i].r->value & c->rst[i].m)) + esk_rf_periph_reset(c->rst[i].q); + settle(c); + lsi_forced(c); + if (c->bdcr) + c->bdcr_kept = c->bdcr->value; + esk_stm32_rtc_sync(c->s); +} + +void esk_stm32g4_rcc_lsi(struct esk_mach *s) +{ + struct g4rcc *c = g4(s); + if (c) + lsi_forced(c); +} + +static void reset_flags(struct g4rcc *c) +{ + int cause = c->s->reset_cause; + if (c->csr) { + u32 f; + if (cause == ESK_RESET_POWER || cause < 0) + f = BORRSTF | PINRSTF; + else if (cause == ESK_RESET_STANDBY && esk_stm32g4_pwr_was_shutdown(c->s)) + f = c->csr_flags | BORRSTF | PINRSTF; /* leaving Shutdown: a brownout reset */ + else if (cause == ESK_RESET_STANDBY) + f = c->csr_flags; /* leaving Standby: the flags kept */ + else { + f = c->csr_flags | PINRSTF; + if (c->obl) + f |= OBLRSTF; + else if (cause == ESK_RESET_SOFTWARE) + f |= SFTRSTF; + else if (cause == ESK_RESET_WATCHDOG) + f |= IWDGRSTF; + else if (cause == ESK_RESET_WINDOW) + f |= WWDGRSTF; + else if (cause == ESK_RESET_LOW_POWER) + f |= LPWRRSTF; + } + esk_rf_hw(c->csr, (c->csr->value & ~(u64)CSR_FLAGS) | f); + c->csr_flags = f; + } + c->obl = 0; + if (c->bdcr) { + if (c->s->reset_cause != ESK_RESET_POWER) + esk_rf_hw(c->bdcr, c->bdcr_kept); + c->bdcr_kept = c->bdcr->value; + } +} + +static void rcc_reset(void *ctx) +{ + struct g4rcc *c = (struct g4rcc *)ctx; + int i, k, listed = 0; + reset_flags(c); + c->hclk = 0; + c->warned = 0; + for (k = 0; k < c->p->rf->ntk; k++) + listed |= c->p->rf->tk[k] == c->p; + if (listed) + esk_rf_clock(c->p, &c->running, 0); + c->running = 0; + for (i = 0; i < O_N; i++) + if (i != O_LSE || c->s->reset_cause == ESK_RESET_POWER) + c->osc[i].ready = c->osc[i].starting = 0; + c->osc[O_HSI].ready = 1; /* the part leaves reset on HSI16 */ + settle(c); + c->since = 0; + lsi_forced(c); +} + +const struct esk_dev_ops esk_stm32g4_rcc_ops = { + "stm32g4-rcc", rcc_read, rcc_write, rcc_reset, rcc_tick, rcc_next, +}; + +/* ---- gates and resets ---------------------------------------------------------- */ + +/* the clock-enable field's stem of a peripheral the RCC does not name after + * it (DMAMUX1EN for DMAMUX, ADC12EN for ADC1), or its own name */ +static const char *gate_stem(const char *name) +{ + static const char *const map[][2] = { + { "DMAMUX", "DMAMUX1" }, { "ADC1", "ADC12" }, { "ADC2", "ADC12" }, { "ADC12_Common", "ADC12" }, + { "ADC3", "ADC345" }, { "ADC4", "ADC345" }, { "ADC5", "ADC345" }, { "ADC345_Common", "ADC345" }, + { "QUADSPI", "QSPI" }, { "RTC", "RTCAPB" }, { "TAMP", "RTCAPB" }, { "USB_FS_device", "USB" }, + { "FDCAN1", "FDCAN" }, { "FDCAN2", "FDCAN" }, { "FDCAN3", "FDCAN" }, { "COMP", "SYSCFG" }, + { "OPAMP", "SYSCFG" }, { "VREFBUF", "SYSCFG" }, { "SAI", "SAI1" }, + }; + size_t i; + if (!strncmp(name, "HRTIM_", 6)) + return "HRTIM1"; + for (i = 0; i < sizeof map / sizeof map[0]; i++) + if (!strcmp(name, map[i][0])) + return map[i][1]; + return name; +} + +static int ends_with(const char *s, const char *t) +{ + size_t a = strlen(s), b = strlen(t); + return a >= b && !strcmp(s + a - b, t); +} + +static int gates(struct esk_mach *s, struct g4rcc *c) +{ + struct esk_rf_periph *q; + int i, k; + c->rst = (struct rst *)esk_mach_alloc(s, (size_t)(s->rf->np > 0 ? s->rf->np : 1) * sizeof *c->rst); + if (!c->rst) + return -1; + for (i = 0; (q = esk_rf_periph_at(s->rf, i)) != 0; i++) { + char en[64], rst[64]; + const char *stem; + if (q == c->p || !strcmp(q->name, "FLASH") || strlen(q->name) > 40) + continue; /* the flash interface's clock goes off only in power-down */ + stem = gate_stem(q->name); + snprintf(en, sizeof en, "%sEN", stem); + snprintf(rst, sizeof rst, "%sRST", stem); + for (k = 0; k < c->p->nreg; k++) { + struct esk_rf_reg *r = c->p->reg[k]; + u64 m; + if (!q->gate && (ends_with(r->name, "ENR") || ends_with(r->name, "ENR1") || ends_with(r->name, "ENR2")) && + !strstr(r->name, "SMENR") && (m = esk_rf_mask(r, en)) != 0) { + size_t l = strlen(c->p->name) + strlen(r->name) + strlen(en) + 3; + char *g = (char *)esk_mach_alloc(s, l); + if (!g) + return -1; + snprintf(g, l, "%s.%s.%s", c->p->name, r->name, en); + q->gate = r; + q->gate_mask = m; + q->gate_name = g; + } + if (strstr(r->name, "RSTR") && (m = esk_rf_mask(r, rst)) != 0) { + c->rst[c->nrst].q = q; + c->rst[c->nrst].r = r; + c->rst[c->nrst].m = m; + c->nrst++; + } + } + } + return 0; +} + +void *esk_stm32g4_rcc_create(struct esk_mach *s, struct esk_rf_periph *p) +{ + struct g4rcc *c; + if (!esk_rf_reg(p, "PLLCFGR") || !esk_rf_reg(p, "CIER") || !esk_rf_reg(p, "CCIPR")) + return 0; /* not the G4's layout */ + c = (struct g4rcc *)esk_mach_alloc(s, sizeof *c); + if (!c) + return 0; + c->s = s; + c->p = p; + c->cr = esk_rf_reg(p, "CR"); + c->cfgr = esk_rf_reg(p, "CFGR"); + c->pllcfgr = esk_rf_reg(p, "PLLCFGR"); + c->cier = esk_rf_reg(p, "CIER"); + c->cifr = esk_rf_reg(p, "CIFR"); + c->cicr = esk_rf_reg(p, "CICR"); + c->csr = esk_rf_reg(p, "CSR"); + c->bdcr = esk_rf_reg(p, "BDCR"); + c->crrcr = esk_rf_reg(p, "CRRCR"); + c->ccipr = esk_rf_reg(p, "CCIPR"); + c->ccipr2 = esk_rf_reg(p, "CCIPR2"); + if (!c->cr || !c->cfgr) + return 0; + c->irq = esk_rf_irq(p, "RCC"); + c->osc[O_HSI].ready = 1; + p->always_on = 1; /* LSE and LSI start through Stop too */ + s->core_hz = g4_core_hz; + s->clock_ctx = c; + if (gates(s, c)) + return 0; + settle(c); + return c; +} diff --git a/core/mcu/stm32/stm32.h b/core/mcu/stm32/stm32.h index a86386798..1bc2ab24d 100644 --- a/core/mcu/stm32/stm32.h +++ b/core/mcu/stm32/stm32.h @@ -18,7 +18,8 @@ * dma_f4.c the F4's DMA controllers: streams, channels, FIFO, double buffer * flash_f1.c the F1's flash interface (FPEC): program, erase, option bytes * storage.c registers that only keep what is written (PWR's CR) - * crc.c the CRC calculation unit: CRC-32 of the words written to DR */ + * crc.c the CRC calculation unit: CRC-32 of the words written to DR + * rcc_g4.c the G4's reset and clock control: HSI16, HSE, PLL, kernel clocks */ #ifndef ESK_MCU_STM32_H #define ESK_MCU_STM32_H @@ -55,6 +56,56 @@ u32 esk_stm32f1_pclk(struct esk_mach *m, int apb); u32 esk_stm32_hclk(struct esk_mach *m); u32 esk_stm32_pclk(struct esk_mach *m, int apb); u32 esk_stm32_timclk(struct esk_mach *m, int apb); +/* the G4's RCC (rcc_g4.c): whether the machine's clock model is it; its + * HCLK, PCLK1 or PCLK2, the timers' clock on an APB, SYSCLK; whether an + * oscillator is ready ('H' HSI16, 'E' HSE, 'I' LSI, 'L' LSE, '4' HSI48); + * the PLL's P, Q or R output (0 off or unlocked); a peripheral's kernel + * clock as CCIPR selects it ("USART1", "LPUART1", "I2C2", "LPTIM1", + * "FDCAN1", "CLK48", "ADC12", "ADC345", "QUADSPI", "SAI1", "I2S23", "RTC"); + * MCO's frequency; the flash or voltage settings changed (warnings + * again); Stop begins (HSE and the PLL off, SYSCLK on HSI16); the coming + * reset is the option bytes' reload (OBLRSTF); LSI forced on by the IWDG */ +int esk_stm32g4_rcc(struct esk_mach *m); +extern const struct esk_dev_ops esk_stm32g4_rcc_ops; +void *esk_stm32g4_rcc_create(struct esk_mach *m, struct esk_rf_periph *p); +u32 esk_stm32g4_hclk(struct esk_mach *m); +u32 esk_stm32g4_pclk(struct esk_mach *m, int apb); +u32 esk_stm32g4_timclk(struct esk_mach *m, int apb); +u32 esk_stm32g4_sysclk(struct esk_mach *m); +int esk_stm32g4_osc_ready(struct esk_mach *m, char which); +u32 esk_stm32g4_pll_hz(struct esk_mach *m, char which); +u32 esk_stm32g4_kernel_hz(struct esk_mach *m, const char *periph); +u32 esk_stm32g4_mco_hz(struct esk_mach *m); +void esk_stm32g4_rcc_check(struct esk_mach *m); +void esk_stm32g4_rcc_stop(struct esk_mach *m, int wake_hsi); +void esk_stm32g4_rcc_obl(struct esk_mach *m); +void esk_stm32g4_rcc_lsi(struct esk_mach *m); +/* the G4's PWR (pwr_g4.c): whether the machine's PWR is it; an internal + * wake-up event (the RTC's, TAMP's); the wake-up pins enabled on a port; + * whether the part is in Standby or Shutdown (its pins let go), and the + * pull a pin keeps then (1 up, 2 down, 0 none); a wake-up pin's level; + * whether the reset under way leaves Shutdown */ +extern const struct esk_dev_ops esk_stm32g4_pwr_ops; +void *esk_stm32g4_pwr_create(struct esk_mach *m, struct esk_rf_periph *p); +int esk_stm32g4_pwr(struct esk_mach *m); +void esk_stm32g4_pwr_wakeup(struct esk_mach *m); +u32 esk_stm32g4_pwr_wkup_mask(struct esk_mach *m, int port); +int esk_stm32g4_pwr_standby(struct esk_mach *m); +int esk_stm32g4_pwr_standby_pull(struct esk_mach *m, int port, int pin); +void esk_stm32g4_pwr_pin_edge(struct esk_mach *m, int port, int pin, int level); +int esk_stm32g4_pwr_was_shutdown(struct esk_mach *m); +/* the G4's flash interface: programming, erasing, the option bytes (flash_g4.c) */ +extern const struct esk_dev_ops esk_stm32g4_flash_ops; +void *esk_stm32g4_flash_create(struct esk_mach *m, struct esk_rf_periph *p); +/* a USART, UART or LPUART of the ISR/ICR/TDR/RDR layout (usart_v2.c): its + * alternate-function signals (USART1_TX, LPUART1_RTS, _DE, _CK) as + * esk_stm32_usart_signal's, nCTS's level, its TX or RX pin (CR2's SWAP + * exchanging them) */ +extern const struct esk_dev_ops esk_stm32_usartv2_ops; +void *esk_stm32_usartv2_create(struct esk_mach *m, struct esk_rf_periph *p); +int esk_stm32_usartv2_signal(struct esk_mach *m, const char *sig); +void esk_stm32_usartv2_signal_input(struct esk_mach *m, const char *sig, int level); +int esk_stm32_usartv2_pin(struct esk_mach *m, const char *unit, int tx, int *port, int *bit); /* the F4's 48 MHz clock (CK48) in Hz: 0 while its PLL is not locked */ u32 esk_stm32f4_ck48(struct esk_mach *m); /* the F4's PWR: VOSRDY, ODRDY and ODSWRDY as the RCC's PLL and PWR's @@ -75,6 +126,9 @@ u32 esk_stm32f4_pwr_wkup_mask(struct esk_mach *m, int port); void esk_stm32f4_pwr_pin_edge(struct esk_mach *m, int port, int pin, int level); void esk_stm32f4_pwr_pins_settled(struct esk_mach *m); int esk_stm32f4_pwr_standby(struct esk_mach *m); +/* the pull a pin keeps in Standby (1 up, 2 down, 0 none): an F4's WKUP + * pin's pull-down, a G4's PWR settings */ +int esk_stm32f4_pwr_standby_pull(struct esk_mach *m, int port, int pin); /* the F4's GPIO ports and SYSCFG (gpio_f4.c, syscfg_f4.c) */ extern const struct esk_dev_ops esk_stm32f4_gpio_ops, esk_stm32f4_syscfg_ops; void *esk_stm32f4_gpio_create(struct esk_mach *m, struct esk_rf_periph *p); @@ -189,5 +243,8 @@ int esk_stm32f1_i2c_pin(struct esk_mach *m, int port, int bit); void esk_stm32f1_port_changed(struct esk_mach *m, int port); /* an input line's level, as GPIO's IDR has it: EXTI's edge detector */ void esk_stm32_exti_input(struct esk_mach *m, int line, int level); +/* a direct line's event (an STM32G4's peripheral wake-up lines): an event + * to the core when its EMR bit is set */ +void esk_stm32_exti_direct(struct esk_mach *m, int line); #endif diff --git a/core/mcu/stm32/syscfg_f4.c b/core/mcu/stm32/syscfg_f4.c index bb22de161..db3d6314e 100644 --- a/core/mcu/stm32/syscfg_f4.c +++ b/core/mcu/stm32/syscfg_f4.c @@ -14,7 +14,16 @@ * mode Plus drive) keep what is written. * The alias at 0 is the description's memory mirror at that address, as * large as the memory it shows; SRAM1 is the first 112 KiB of the - * description's SRAM (RM0390 2.3: SRAM1 112 KiB, then SRAM2 16 KiB). */ + * description's SRAM (RM0390 2.3: SRAM1 112 KiB, then SRAM2 16 KiB). + * + * The STM32G4's (RM0440 9, a SYSCFG with SCSR): MEM_MODE as above, SRAM1 + * its first 80 KiB, 100 the QUADSPI's memory (none on the bus: nothing + * there); SCSR's CCMER erases the CCM SRAM (32 KiB at 0x20018000, its + * alias at 0x10000000) to 0, CCMBSY reading 0 at once; CFGR1 (the FPU's + * interrupt enables, the I2C pins' Fast-mode Plus drive), CFGR2, SWPR, + * SKR and MEMRMP's FB_MODE keep what is written. Not modelled: the erase's + * time (CCMBSY), SWPR's write protection of the CCM SRAM's pages, the + * parity errors CFGR2 reports, FB_MODE's bank swap. */ #include #include "mcu/stm32/stm32.h" @@ -24,8 +33,9 @@ struct syscfg { struct esk_mach *s; struct esk_rf_periph *p; - struct esk_rf_reg *memrmp, *exticr[4], *cmpcr; + struct esk_rf_reg *memrmp, *exticr[4], *cmpcr, *scsr; u32 mode; /* the MEM_MODE mapped now */ + int g4; }; static struct syscfg *syscfg_of(struct esk_mach *s) @@ -58,7 +68,7 @@ static void remap(struct syscfg *c) (void)esk_bus_remap_mirror(&c->s->bus, BOOT_ALIAS, 0x1FFF0000u, ~0u); break; case 3: - (void)esk_bus_remap_mirror(&c->s->bus, BOOT_ALIAS, 0x20000000u, 112u * 1024u); + (void)esk_bus_remap_mirror(&c->s->bus, BOOT_ALIAS, 0x20000000u, (c->g4 ? 80u : 112u) * 1024u); break; default: (void)esk_bus_remap_mirror(&c->s->bus, BOOT_ALIAS, 0, 0); @@ -87,6 +97,15 @@ static void syscfg_write(void *ctx, u32 off, int n, u32 v) { struct syscfg *c = (struct syscfg *)ctx; esk_rf_write(c->p, off, n, v); + if (c->scsr && off == esk_rf_off(c->scsr) && (c->scsr->value & 1u)) { + /* CCMER: the CCM SRAM erased */ + struct esk_region *r = esk_bus_region(&c->s->bus, 0x20018000u, 32u * 1024u); + if (r && r->mem) { + memset(r->mem + (0x20018000u - r->base), 0, 32u * 1024u); + r->gen++; + } + esk_rf_hw(c->scsr, c->scsr->value & ~(u64)3u); + } settle(c); } @@ -118,6 +137,8 @@ void *esk_stm32f4_syscfg_create(struct esk_mach *s, struct esk_rf_periph *p) if (!c.memrmp) c.memrmp = esk_rf_reg(p, "MEMRMP"); c.cmpcr = esk_rf_reg(p, "CMPCR"); + c.scsr = esk_rf_reg(p, "SCSR"); + c.g4 = c.scsr != 0; c.mode = 0xFF; x = (struct syscfg *)esk_mach_alloc(s, sizeof *x); if (x) diff --git a/core/mcu/stm32/tim.c b/core/mcu/stm32/tim.c index 965ebbc5b..102416e65 100644 --- a/core/mcu/stm32/tim.c +++ b/core/mcu/stm32/tim.c @@ -26,7 +26,8 @@ * counting down) and makes an update event; * - SR's flags are rc_w0; * - it does not count while its clock is gated off (RCC's enable bit). - * The counter's width is CNT's fields' (TIM2 and TIM5 are 32-bit). + * The counter's width is CNT's fields' (TIM2 and TIM5 are 32-bit), a + * G4's UIFCPY in bit 31 aside. * * Capture/compare channels (as many as CCRx registers): * - output compare (CCxS 00): a match is the counter becoming CCRx, in @@ -98,6 +99,12 @@ * the OTG controllers' SOF (none here). A remapped clock's edges come at * its half periods, at the core clock. * + * A G4's TISEL (RM0440 28.6.25 and the like) puts a clock inside the part on + * TI1 the same way: TIM16's and TIM17's TI1SEL 2 MCO, 3 HSE/32, 5 LSE, 6 + * LSI (as HAL's way of measuring LSI does); TIM5's 1 LSI, 2 LSE; TIM15's + * 1 LSE. The comparators' outputs and the RTC's wake-up on TISEL are not + * modelled (no edges). + * * Not modelled: TIM5's TI4 on the RTC's wake-up interrupt (IT4_RMP 11: * no edges), the OTG controllers' SOF on TIM2's ITR1, MSM's delay (TRGI acts at once * anyway), the forced idle levels' dead time after a break, the fast @@ -157,6 +164,7 @@ struct tim { struct esk_rf_reg *ccmr[2], *ccer, *ccr[4]; int nch; /* capture/compare channels */ int apb; /* 1 or 2 */ + int fz_word, fz_bit; /* its DBG_TIMx_STOP in DBGMCU (dbg.fz), or -1 */ int unit; /* TIMn's n */ int itr[4]; /* ITR0-ITR3: the masters' units, 0 none */ u64 cntmask; @@ -196,13 +204,13 @@ struct tim { /* TIMx_OR's internal remaps: the input (0 for TI1, 3 for TI4) a clock * inside the part drives instead of its pin, -1 none; its kind; the * next edge, counted from t0 at the core clock it was scheduled at */ - struct esk_rf_reg *orr; + struct esk_rf_reg *orr, *tisel; int src_x, src_kind; u64 src_t0, src_k, src_at; u32 src_core_hz, src_hz_last; }; -enum { SRC_NONE, SRC_LSI, SRC_LSE, SRC_HSE_RTC }; +enum { SRC_NONE, SRC_LSI, SRC_LSE, SRC_HSE_RTC, SRC_HSE_32, SRC_MCO }; static void interconnect(struct tim *t); @@ -965,6 +973,15 @@ static u32 src_hz(const struct tim *t) { struct esk_rf_reg *r; u32 pre; + if (esk_stm32g4_rcc(t->s)) { /* a G4's RCC */ + switch (t->src_kind) { + case SRC_LSI: return esk_stm32g4_osc_ready(t->s, 'I') ? 32000u : 0; + case SRC_LSE: return esk_stm32g4_osc_ready(t->s, 'L') ? (t->s->lse_hz ? t->s->lse_hz : 32768u) : 0; + case SRC_HSE_32: return esk_stm32g4_osc_ready(t->s, 'E') ? t->s->hse_hz / 32u : 0; + case SRC_MCO: return esk_stm32g4_mco_hz(t->s); + default: return 0; + } + } switch (t->src_kind) { case SRC_LSI: r = rcc_reg(t->s, "CSR"); @@ -1022,7 +1039,16 @@ static void remap(struct tim *t) { u32 v = t->orr ? (u32)t->orr->value : 0; int kind = SRC_NONE, x = -1; - if (t->unit == 5) { + if (t->tisel) { /* a G4's TI1SEL */ + u32 sel = (u32)t->tisel->value & 15u; + if (t->unit == 16 || t->unit == 17) + kind = sel == 2 ? SRC_MCO : sel == 3 ? SRC_HSE_32 : sel == 5 ? SRC_LSE : sel == 6 ? SRC_LSI : SRC_NONE; + else if (t->unit == 5) + kind = sel == 1 ? SRC_LSI : sel == 2 ? SRC_LSE : SRC_NONE; + else if (t->unit == 15) + kind = sel == 1 ? SRC_LSE : SRC_NONE; + x = kind ? 0 : -1; + } else if (t->unit == 5) { u32 r = v >> 6 & 3u; /* IT4_RMP: GPIO, LSI, LSE, the RTC's wake-up interrupt */ kind = r == 1 ? SRC_LSI : r == 2 ? SRC_LSE : SRC_NONE; x = kind ? 3 : -1; @@ -1077,11 +1103,39 @@ static int frozen(const struct tim *t) int u = t->unit; if (!t->s->dbg.halted) return 0; + if (t->fz_word >= 0) /* found by name (a G4's: APB1L_FZ, APB2_FZ) */ + return (t->s->dbg.fz[t->fz_word] >> t->fz_bit & 1u) != 0; if (u > 0 && u < 15 && apb1[u] >= 0 && (t->s->dbg.fz[0] >> apb1[u] & 1u)) return 1; return u > 0 && u < 12 && apb2[u] >= 0 && (t->s->dbg.fz[1] >> apb2[u] & 1u); } +/* the timer's DBG_TIMx_STOP (or DBG_TIMERx_STOP) in DBGMCU's APB1 or APB2 + * freeze register, found by name: the word of dbg.fz and the bit, or -1 */ +static void freeze_bit(struct tim *t) +{ + struct esk_rf_periph *d = t->s->rf ? esk_rf_periph(t->s->rf, "DBGMCU") : 0; + char a[32], b[32]; + int k, i; + t->fz_word = t->fz_bit = -1; + if (!d || t->unit <= 0) + return; + snprintf(a, sizeof a, "DBG_TIM%d_STOP", t->unit); + snprintf(b, sizeof b, "DBG_TIMER%d_STOP", t->unit); + for (k = 0; k < d->nreg; k++) { + const struct esk_rf_reg *r = d->reg[k]; + int word = strstr(r->name, "APB1") ? 0 : strstr(r->name, "APB2") ? 1 : -1; + if (word < 0 || strstr(r->name, "APB1H")) + continue; + for (i = 0; i < r->nf; i++) + if (r->f[i].name && (!strcmp(r->f[i].name, a) || !strcmp(r->f[i].name, b))) { + t->fz_word = word; + t->fz_bit = r->f[i].lsb; + return; + } + } +} + /* frozen: every deadline moves on with the time, the counter holds */ static void hold(struct tim *t, u32 cycles) { @@ -1363,7 +1417,7 @@ static void tim_write(void *ctx, u32 off, int n, u32 v) if (!(t->dier->value & (1u << 13))) esk_stm32_dma_request(t->s, t->sig_com, 0); } - if (t->orr && off == esk_rf_off(t->orr)) + if ((t->orr && off == esk_rf_off(t->orr)) || (t->tisel && off == esk_rf_off(t->tisel))) remap(t); run_clock(t); irq_check(t); @@ -1584,6 +1638,8 @@ void *esk_stm32_tim_create(struct esk_mach *s, struct esk_rf_periph *p) } for (i = 0; i < t.cnt->nf; i++) { int top = t.cnt->f[i].lsb + t.cnt->f[i].width; + if (t.cnt->f[i].name && !strncmp(t.cnt->f[i].name, "UIFCPY", 6)) + continue; /* a G4's copy of UIF in bit 31, not the counter's */ u64 m = top >= 64 ? ~0ULL : (1ULL << top) - 1; if (m > t.cntmask) t.cntmask = m; @@ -1607,6 +1663,8 @@ void *esk_stm32_tim_create(struct esk_mach *s, struct esk_rf_periph *p) t.dcr = esk_rf_reg(p, "DCR"); t.dmar = esk_rf_reg(p, "DMAR"); t.orr = t.unit == 2 || t.unit == 5 || t.unit == 11 ? esk_rf_reg(p, "OR") : 0; + t.tisel = esk_rf_reg(p, "TISEL"); + freeze_bit(&t); t.src_x = -1; snprintf(t.sig_up, sizeof t.sig_up, "%s_UP", p->name); snprintf(t.sig_trig, sizeof t.sig_trig, "%s_TRIG", p->name); diff --git a/core/mcu/stm32/usart.c b/core/mcu/stm32/usart.c index 273d125a3..26a9221b9 100644 --- a/core/mcu/stm32/usart.c +++ b/core/mcu/stm32/usart.c @@ -602,7 +602,9 @@ int esk_stm32_usart_signal(struct esk_mach *s, const char *sig) { const char *fn; struct usart *u = signal_of(s, sig, &fn); - if (!u || !(v32(u->cr1) & UE)) + if (!u) + return esk_stm32_usartv2_signal(s, sig); /* a G4's (usart_v2.c) */ + if (!(v32(u->cr1) & UE)) return -1; if (!strcmp(fn, "TX")) return (v32(u->cr1) & TE) || (v32(u->cr3) & HDSEL) ? 1 : -1; /* idle high; the waveform is the runtime's */ @@ -617,7 +619,11 @@ void esk_stm32_usart_signal_input(struct esk_mach *s, const char *sig, int level { const char *fn; struct usart *u = signal_of(s, sig, &fn); - if (!u || strcmp(fn, "CTS")) + if (!u) { + esk_stm32_usartv2_signal_input(s, sig, level); + return; + } + if (strcmp(fn, "CTS")) return; level = level != 0; if (level == u->cts) diff --git a/core/mcu/stm32/usart_v2.c b/core/mcu/stm32/usart_v2.c new file mode 100644 index 000000000..35d4ad14f --- /dev/null +++ b/core/mcu/stm32/usart_v2.c @@ -0,0 +1,980 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* Copyright 2026 Junior Deogracias */ +/* usart_v2.c -- an STM32 USART, UART or LPUART of the ISR/ICR/TDR/RDR + * layout (the G4's: RM0440 37 and 38; the same IP on the L4, G0, H7), + * over the register file, at its baud rate. + * + * The frame: + * - a start bit, 7, 8 or 9 bits (CR1's M1:M0: 10, 00, 01), the last of + * them the parity bit with PCE (PS: even or odd), and the stop bits + * (CR2.STOP: 1, 0.5, 2 or 1.5; an LPUART has no 0.5 or 1.5); + * - its data least significant bit first, or most with CR2.MSBFIRST, + * inverted with DATAINV (the bits on the line, and so the character a + * terminal decodes from them); + * - the bit time from the kernel clock (RCC's CCIPR selection, + * esk_stm32g4_kernel_hz) over PRESC's prescaler (1 to 256): a USART's + * USARTDIV clocks (BRR with 16 times oversampling; with OVER8, + * BRR[15:4] << 1 | BRR[2:0]... as RM0440 37.5.7 gives it, 8 times), an + * LPUART's 256 x clock / BRR. + * Transmitting: + * - TE and RE, with UE, set TEACK and REACK (ISR), which the HAL waits + * for; TE set sends an idle frame first; + * - a write to TDR goes to the transmit FIFO with CR1.FIFOEN (8 frames, + * TXFNF in ISR's bit 7 while it is not full, TXFE when empty, TXFT at + * CR3.TXFTCFG's threshold), else to the transmit data register (TXE, + * bit 7, while it is empty); a frame starts as the shift register + * empties, TC at the end of the last one; + * - RQR's SBKRQ sends a break after the current frame (SBKF meanwhile): + * the frame's length of 0s (13 with LINEN) and a stop bit; TXFRQ + * empties the transmit FIFO; + * - with CR3.CTSE a frame starts only while nCTS is low; its changes set + * CTSIF (CTS the line's level); with CR3.DEM, DE (on the RTS pin, + * DEP's polarity) is asserted from a frame's start to its end, then + * deasserted; + * - each frame goes to the MCU runtime (esk_mach_host.uart_frame), with + * its format and bit time: the serial stream, and the TX pin's waveform + * (TX idles high while UE and TE are set; with CR2.SWAP TX and RX + * exchange pins). + * Receiving (RE): + * - a frame comes from the RX pin's waveform (the runtime's decoder at + * this format) or from the session's serial input; it goes to the + * receive FIFO (FIFOEN, 8 frames: RXFNE in ISR's bit 5 while not + * empty, RXFF when full, RXFT at CR3.RXFTCFG's threshold) or to RDR + * (RXNE); one that finds no room is an overrun (ORE, the frame lost; + * with CR3.OVRDIS it overwrites RDR instead and ORE stays clear); + * a parity mismatch sets PE, a low stop bit FE (a break: FE with 0, and + * LBDF with LINEN); a line idle for a frame after a reception sets + * IDLE; a received character equal to CR2's ADD sets CMF; with RTOEN, + * RTOR's count of bit times after the last stop bit sets RTOF; + * the error flags are cleared through ICR; reading RDR takes a frame; + * - mute mode (MME, entered by RQR.MMRQ: RWU): frames are ignored until + * an idle line (WAKE 0) or an address frame (WAKE 1: the MSB set and + * ADD's 4 low bits, or its 7 with ADDM7) wakes it; an address frame + * for another node mutes it again; + * - with CR3.RTSE nRTS is low while the receiver has room; + * - half-duplex (HDSEL): the receiver listens on the TX pin. + * - in Stop, a receiver whose kernel clock runs there (CR1.UESM with + * HSI16 or LSE selected) still receives, setting WUF on the event + * CR3.WUS selects (00 address match, 10 a start bit, 11 RXNE) and so + * waking the core through its interrupt (WUFIE) and EXTI's direct + * line; otherwise a frame arriving in Stop is lost. + * Synchronous mode (CR2.CLKEN, master): the CK pin clocks each data bit + * (the last with LBCL), idling at CPOL, the data valid at the edge CPHA + * picks; RX is sampled at that edge. + * DMA (CR3): DMAT requests the transmitter's DMA while TXE/TXFNF is set, + * DMAR the receiver's while RXNE/RXFNE is set (USARTn_TX, USARTn_RX, + * LPUART1_TX, ...); DDRE: a reception error stops DMAR's requests until + * the error is cleared. + * The interrupt is pending while a flag is set with its enable: TXE/TXFNF + * with TXEIE, TC with TCIE, RXNE/RXFNE or ORE with RXNEIE, IDLE with + * IDLEIE, PE with PEIE, LBDF with LBDIE, CTSIF with CTSIE, CMF with + * CMIE, RTOF with RTOIE, WUF with WUFIE, TXFE with TXFEIE, RXFF with + * RXFFIE, TXFT with TXFTIE, RXFT with RXFTIE, or FE, NE or ORE with EIE. + * + * Not modelled: noise detection (one sample a bit: NE never sets, ONEBIT + * changes nothing), auto baud rate detection (ABREN: ABRF never sets and + * the rate stays BRR's), TXINV and RXINV (the line's levels are the + * standard ones: the runtime's waveform knows no inverted line), the DE + * assertion and deassertion times (DEAT, DEDT: DE spans the frame), the + * synchronous slave (SLVEN), smartcard (SCEN, NACK, GTPR, SCARCNT, EOBF) + * and IrDA (IREN, IRLP) modes, which no catalog part speaks, the + * TCBGT flag. */ +#include +#include + +#include "mcu/stm32/stm32.h" + +/* ISR */ +#define PE (1u << 0) +#define FE (1u << 1) +#define NE (1u << 2) +#define ORE (1u << 3) +#define IDLE (1u << 4) +#define RXNE (1u << 5) +#define TC (1u << 6) +#define TXE (1u << 7) +#define LBDF (1u << 8) +#define CTSIF (1u << 9) +#define CTS (1u << 10) +#define RTOF (1u << 11) +#define BUSY (1u << 16) +#define CMF (1u << 17) +#define SBKF (1u << 18) +#define RWU (1u << 19) +#define WUF (1u << 20) +#define TEACK (1u << 21) +#define REACK (1u << 22) +#define TXFE (1u << 23) +#define RXFF (1u << 24) +#define RXFT (1u << 26) +#define TXFT (1u << 27) +/* CR1 */ +#define UE (1u << 0) +#define UESM (1u << 1) +#define RE (1u << 2) +#define TE (1u << 3) +#define IDLEIE (1u << 4) +#define RXNEIE (1u << 5) +#define TCIE (1u << 6) +#define TXEIE (1u << 7) +#define PEIE (1u << 8) +#define PS (1u << 9) +#define PCE (1u << 10) +#define WAKE (1u << 11) +#define M0 (1u << 12) +#define MME (1u << 13) +#define CMIE (1u << 14) +#define OVER8 (1u << 15) +#define RTOIE (1u << 26) +#define M1 (1u << 28) +#define FIFOEN (1u << 29) +#define TXFEIE (1u << 30) +#define RXFFIE (1u << 31) +/* CR2 */ +#define ADDM7 (1u << 4) +#define LBDIE (1u << 6) +#define LBCL (1u << 8) +#define CPHA (1u << 9) +#define CPOL (1u << 10) +#define CLKEN (1u << 11) +#define LINEN (1u << 14) +#define SWAP (1u << 15) +#define DATAINV (1u << 18) +#define MSBFIRST (1u << 19) +#define RTOEN (1u << 23) +/* CR3 */ +#define EIE (1u << 0) +#define HDSEL (1u << 3) +#define DMAR (1u << 6) +#define DMAT (1u << 7) +#define RTSE (1u << 8) +#define CTSE (1u << 9) +#define CTSIE (1u << 10) +#define OVRDIS (1u << 12) +#define DDRE (1u << 13) +#define DEM (1u << 14) +#define DEP (1u << 15) +#define WUFIE (1u << 22) +#define TXFTIE (1u << 23) +#define RXFTIE (1u << 28) +/* RQR */ +#define SBKRQ (1u << 1) +#define MMRQ (1u << 2) +#define RXFRQ (1u << 3) +#define TXFRQ (1u << 4) + +#define FIFO 8 +#define CK_MAX 20 + +struct uv2 { + struct esk_mach *s; + struct esk_rf_periph *p; + struct esk_rf_reg *cr1, *cr2, *cr3, *brr, *rtor, *rqr, *isr, *icr, *rdr, *tdr, *presc; + int irq, lp, running; + /* the transmitter: the frames waiting (TDR, or the FIFO), the shift register */ + u16 txq[FIFO]; + int ntx; + int busy, brk, idle_frame; + u64 left; + /* the receiver */ + u16 rxq[FIFO]; + u8 rxerr[FIFO]; /* each frame's PE and FE */ + int nrx; + u64 idle_left, rto_left; + int cts, rts, ck, de; + u64 ck_at[CK_MAX]; + int nck, ck_next, ck_sample[CK_MAX]; + u16 sync_rx; + int sync_bits; + char sig_tx[16], sig_rx[16]; +}; + +static u32 v32(const struct esk_rf_reg *r) { return r ? (u32)r->value : 0; } + +static int fifo(const struct uv2 *u) { return (v32(u->cr1) & FIFOEN) != 0; } + +static int depth(const struct uv2 *u) { return fifo(u) ? FIFO : 1; } + +static void isr_set(struct uv2 *u, u32 set, u32 clear) +{ + u64 v = (u->isr->value & ~(u64)clear) | set; + if (v != u->isr->value) + esk_rf_hw(u->isr, v); +} + +/* the FIFO thresholds (TXFTCFG, RXFTCFG): 1/8, 1/4, 1/2, 3/4, 7/8, full */ +static int threshold(u32 cfg) +{ + static const int n[8] = { 1, 2, 4, 6, 7, 8, 8, 8 }; + return n[cfg & 7]; +} + +/* ISR's flags as the queues have them */ +static void flags(struct uv2 *u) +{ + u32 set = 0, clear = 0, c3 = v32(u->cr3); + int room = depth(u) - u->ntx; + if (room > 0) + set |= TXE; + else + clear |= TXE; + if (u->ntx == 0) + set |= TXFE; + else + clear |= TXFE; + if (u->nrx > 0) + set |= RXNE; + else + clear |= RXNE; + if (fifo(u)) { + if (u->nrx >= FIFO) + set |= RXFF; + else + clear |= RXFF; + /* TXFT: the FIFO holds no more than its threshold's free slots' worth */ + if (FIFO - u->ntx >= threshold(c3 >> 29)) + set |= TXFT; + else + clear |= TXFT; + if (u->nrx >= threshold(c3 >> 25)) + set |= RXFT; + else + clear |= RXFT; + } else { + clear |= RXFF | RXFT | TXFT; + } + if (u->busy) + set |= BUSY; + else + clear |= BUSY; + isr_set(u, set, clear); +} + +static void dma_check(struct uv2 *u) +{ + u32 isr = v32(u->isr), c3 = v32(u->cr3), c1 = v32(u->cr1); + int err = (c3 & DDRE) && (isr & (PE | FE | NE | ORE)); + esk_stm32_dma_request(u->s, u->sig_tx, (c3 & DMAT) && (isr & TXE) && (c1 & UE) && (c1 & TE)); + esk_stm32_dma_request(u->s, u->sig_rx, (c3 & DMAR) && (isr & RXNE) && (c1 & UE) && !err); +} + +static void update_irq(struct uv2 *u) +{ + u32 isr = v32(u->isr), c1 = v32(u->cr1), c2 = v32(u->cr2), c3 = v32(u->cr3); + if (((isr & TXE) && (c1 & TXEIE)) || ((isr & TC) && (c1 & TCIE)) || ((isr & (RXNE | ORE)) && (c1 & RXNEIE)) || + ((isr & IDLE) && (c1 & IDLEIE)) || ((isr & PE) && (c1 & PEIE)) || ((isr & LBDF) && (c2 & LBDIE)) || + ((isr & CTSIF) && (c3 & CTSIE)) || ((isr & CMF) && (c1 & CMIE)) || ((isr & RTOF) && (c1 & RTOIE)) || + ((isr & WUF) && (c3 & WUFIE)) || ((isr & TXFE) && (c1 & TXFEIE) && fifo(u)) || + ((isr & RXFF) && (c1 & RXFFIE)) || ((isr & TXFT) && (c3 & TXFTIE)) || ((isr & RXFT) && (c3 & RXFTIE)) || + ((isr & (FE | NE | ORE)) && (c3 & EIE))) + esk_rf_interrupt(u->p, u->irq); +} + +/* ---- the frame's format and time --------------------------------------------- */ + +static int data_bits(const struct uv2 *u) +{ + u32 c1 = v32(u->cr1); + return (c1 & M1) ? 7 : (c1 & M0) ? 9 : 8; +} + +static int stop_halves(const struct uv2 *u) +{ + static const int halves[4] = { 2, 1, 4, 3 }; + int h = halves[v32(u->cr2) >> 12 & 3]; + if (u->lp && (h == 1 || h == 3)) + h = 2; /* an LPUART's: 1 or 2 stop bits */ + return h; +} + +static u32 presc_div(const struct uv2 *u) +{ + static const u32 d[12] = { 1, 2, 4, 6, 8, 10, 12, 16, 32, 64, 128, 256 }; + u32 k = v32(u->presc) & 15u; + return k < 12 ? d[k] : 256; +} + +static u32 kernel_hz(const struct uv2 *u) +{ + u32 hz = esk_stm32g4_kernel_hz(u->s, u->p->name); + if (!hz && !esk_stm32g4_rcc(u->s)) + hz = esk_stm32_pclk(u->s, u->p->gate_name && strstr(u->p->gate_name, "APB2") ? 2 : 1); + return hz / presc_div(u); +} + +/* core cycles per bit */ +static u32 bit_cycles(const struct uv2 *u) +{ + u32 brr = v32(u->brr), ker = kernel_hz(u), core = esk_mach_core_hz(u->s); + u64 num, den, c; + if (!ker || !brr || !core) + return 1; + if (u->lp) { + num = (u64)brr * core; /* bit = BRR / (256 x ker) */ + den = (u64)256u * ker; + } else { + u32 div = brr & 0xffffu; + if (v32(u->cr1) & OVER8) + div = (div & 0xfff0u) | (div & 7u) << 1; /* BRR[3] must be 0 */ + num = (u64)div * core; + den = ker; + if (v32(u->cr1) & OVER8) + den *= 2u; + } + c = (num + den / 2) / den; + return c ? (u32)(c > 0xffffffu ? 0xffffffu : c) : 1; +} + +static u64 frame_cycles(const struct uv2 *u) +{ + return (u64)bit_cycles(u) * (u64)(2 * (1 + data_bits(u)) + stop_halves(u)) / 2u; +} + +static u32 parity_of(u32 v, int n) +{ + u32 ones = 0; + int k; + for (k = 0; k < n; k++) + ones += v >> k & 1u; + return ones & 1u; +} + +/* the bits on the line (LSB first) of data `v`: MSBFIRST and DATAINV + * applied to the data, then the parity bit */ +static u32 line_bits(const struct uv2 *u, u32 v) +{ + int n = data_bits(u), d = (v32(u->cr1) & PCE) ? n - 1 : n, k; + u32 data = v & ((1u << d) - 1), out = 0; + if (v32(u->cr2) & DATAINV) + data = ~data & ((1u << d) - 1); + if (v32(u->cr2) & MSBFIRST) { + for (k = 0; k < d; k++) + out |= (data >> k & 1u) << (d - 1 - k); + data = out; + } + if (v32(u->cr1) & PCE) + data |= (parity_of(data, d) ^ ((v32(u->cr1) & PS) ? 1u : 0u)) << d; + return data; +} + +/* the data a frame's line bits carry, and whether its parity is right */ +static u32 data_of(const struct uv2 *u, u32 bits, int *parity_ok) +{ + int n = data_bits(u), d = (v32(u->cr1) & PCE) ? n - 1 : n, k; + u32 data = bits & ((1u << d) - 1), out = 0; + *parity_ok = 1; + if (v32(u->cr1) & PCE) + *parity_ok = (parity_of(bits, n) ^ ((v32(u->cr1) & PS) ? 1u : 0u)) == 0; + if (v32(u->cr2) & MSBFIRST) { + for (k = 0; k < d; k++) + out |= (data >> k & 1u) << (d - 1 - k); + data = out; + } + if (v32(u->cr2) & DATAINV) + data = ~data & ((1u << d) - 1); + /* RDR holds the parity bit in its place, as the frame had it */ + if (v32(u->cr1) & PCE) + data |= (bits >> d & 1u) << d; + return data; +} + +static void run_clock(struct uv2 *u) +{ + esk_rf_clock(u->p, &u->running, u->busy || u->idle_left || u->rto_left || u->ck_next < u->nck); +} + +static void pins(struct uv2 *u) +{ + if (u->s->pins_changed) + u->s->pins_changed(u->s); +} + +static void rts_update(struct uv2 *u) +{ + int r = (v32(u->cr3) & RTSE) ? u->nrx >= depth(u) : 1; + if (r != u->rts) { + u->rts = r; + pins(u); + } +} + +static void de_set(struct uv2 *u, int on) +{ + if ((v32(u->cr3) & DEM) && on != u->de) { + u->de = on; + pins(u); + } +} + +/* ---- the receiver -------------------------------------------------------- */ + +static int receiving(const struct uv2 *u) +{ + u32 c1 = v32(u->cr1); + if (!(c1 & UE) || !(c1 & RE)) + return 0; + if (u->s->clocks_stopped) { + /* Stop: only a kernel clock that runs there (HSI16, LSE) with UESM */ + u32 sel = 0; + struct esk_rf_periph *rcc = esk_rf_periph(u->s->rf, "RCC"); + struct esk_rf_reg *ccipr = rcc ? esk_rf_reg(rcc, "CCIPR") : 0; + int k = !strcmp(u->p->name, "LPUART1") ? 5 : u->p->name[strlen(u->p->name) - 1] - '1'; + if (ccipr && k >= 0 && k <= 5) + sel = (u32)(ccipr->value >> (2 * k) & 3); + return (c1 & UESM) && (sel == 2 || sel == 3); + } + return 1; +} + +static void wake_event(struct uv2 *u, u32 wus) +{ + u32 c3 = v32(u->cr3); + if (!u->s->clocks_stopped || ((c3 >> 20) & 3) != wus) + return; + isr_set(u, WUF, 0); + if (c3 & WUFIE) + esk_rf_interrupt(u->p, u->irq); +} + +static void receive(struct uv2 *u, u32 bits, int framing_error) +{ + u32 c1 = v32(u->cr1), c2 = v32(u->cr2), n = (u32)data_bits(u), raw = bits & ((1u << n) - 1), v; + int brk = framing_error && raw == 0, pok; + if (!receiving(u)) + return; + v = data_of(u, raw, &pok); + u->idle_left = frame_cycles(u); + u->rto_left = (c2 & RTOEN) ? (u64)bit_cycles(u) * (v32(u->rtor) & 0xffffffu) : 0; + run_clock(u); + if (brk && (c2 & LINEN)) + isr_set(u, LBDF, 0); + { + /* address mark (WAKE 1): the data's MSB (below the parity bit) set, + * ADD's 4 (or 7, ADDM7) low bits matching */ + u32 msb = (c1 & PCE) ? n - 2 : n - 1, amask = (c2 & ADDM7) ? 0x7fu : 0x0fu; + int address = (c1 & WAKE) && (v >> msb & 1); + int ours = address && (v & amask) == ((c2 >> 24) & amask); + if (ours) + wake_event(u, 0); + if (v32(u->isr) & RWU) { + if (!ours) { + update_irq(u); + return; + } + isr_set(u, 0, RWU); + } else if (address && !ours && (c1 & MME)) { + isr_set(u, RWU, 0); + update_irq(u); + return; + } + } + if ((v & 0xffu) == (c2 >> 24)) + isr_set(u, CMF, 0); + if (u->nrx >= depth(u)) { + if (v32(u->cr3) & OVRDIS) { + u->rxq[u->nrx - 1] = (u16)v; /* the last frame overwritten */ + } else { + isr_set(u, ORE, 0); + } + } else { + u->rxq[u->nrx] = (u16)v; + u->rxerr[u->nrx] = (u8)((pok ? 0 : PE) | (framing_error ? FE : 0)); + u->nrx++; + if (u->nrx == 1) { + esk_rf_hw(u->rdr, u->rxq[0]); + isr_set(u, u->rxerr[0], 0); + } + } + flags(u); + wake_event(u, 3); + rts_update(u); + update_irq(u); + dma_check(u); +} + +static u32 uv2_format(void *ctx) +{ + const struct uv2 *u = (const struct uv2 *)ctx; + return (u32)data_bits(u) | (u32)stop_halves(u) << 8; +} + +static void uv2_put_frame(void *ctx, u32 bits, int framing_error) +{ + receive((struct uv2 *)ctx, bits, framing_error); +} + +static void uv2_started(void *ctx) +{ + struct uv2 *u = (struct uv2 *)ctx; + u->idle_left = 0; + u->rto_left = 0; + if (receiving(u)) + wake_event(u, 2); +} + +/* the session's serial input: a byte as a terminal sends it (LSB first, + * the parity it is set up for); the receiver reads it as its own format + * says, MSBFIRST and DATAINV included */ +static void uv2_put(void *ctx, int c) +{ + struct uv2 *u = (struct uv2 *)ctx; + int n = data_bits(u), d = (v32(u->cr1) & PCE) ? n - 1 : n; + u32 bits = (u32)c & ((1u << d) - 1); + if (v32(u->cr1) & PCE) + bits |= (parity_of(bits, d) ^ ((v32(u->cr1) & PS) ? 1u : 0u)) << d; + receive(u, bits, 0); +} + +static int uv2_room(void *ctx) +{ + struct uv2 *u = (struct uv2 *)ctx; + return (v32(u->cr1) & UE) && (v32(u->cr1) & RE) && !(v32(u->cr2) & CLKEN); +} + +static u32 uv2_bit_cycles(void *ctx) +{ + return bit_cycles((const struct uv2 *)ctx); +} + +/* ---- the transmitter ----------------------------------------------------- */ + +static void sync_clock(struct uv2 *u, u64 b) +{ + u32 c2 = v32(u->cr2); + int n = data_bits(u), k, pulses = (c2 & LBCL) ? n : n - 1; + u->nck = 0; + u->ck_next = 0; + u->sync_rx = 0; + u->sync_bits = 0; + for (k = 0; k < pulses && u->nck + 2 <= CK_MAX; k++) { + u64 bit0 = b + (u64)k * b; + u64 e1 = (c2 & CPHA) ? bit0 : bit0 + b / 2, e2 = e1 + b / 2; + u->ck_at[u->nck] = e1; + u->ck_sample[u->nck++] = !(c2 & CPHA); + u->ck_at[u->nck] = e2; + u->ck_sample[u->nck++] = (c2 & CPHA) != 0; + } +} + +static void start_frame(struct uv2 *u, u32 v, int brk, int idle) +{ + struct esk_mach *s = u->s; + int n = data_bits(u); + u64 b = bit_cycles(u); + u->busy = 1; + u->brk = brk; + u->idle_frame = idle; + u->left = frame_cycles(u); + isr_set(u, BUSY, TC); + if (brk) { + int zeros = (v32(u->cr2) & LINEN) ? 12 : n + 1; + u->left = b * (u64)(1 + zeros) + b; + isr_set(u, SBKF, 0); + if (s->host.uart_frame) + s->host.uart_frame(s->host.ctx, u->p->name, -1, 0, zeros, 2, (u32)b); + } else if (!idle) { + u32 bits = line_bits(u, v); + int d = (v32(u->cr1) & PCE) ? n - 1 : n; + int c = (int)(bits & ((1u << (d > 8 ? 8 : d)) - 1)); + de_set(u, 1); + if (s->host.uart_frame) + s->host.uart_frame(s->host.ctx, u->p->name, c, bits, n, stop_halves(u), (u32)b); + else if (s->host.uart_tx) + s->host.uart_tx(s->host.ctx, u->p->name, c, (u32)b); + if (v32(u->cr2) & CLKEN) + sync_clock(u, b); + } + run_clock(u); +} + +static void next_frame(struct uv2 *u) +{ + if (u->busy) + return; + if (!(v32(u->cr1) & UE) || !(v32(u->cr1) & TE)) + return; + if ((v32(u->cr3) & CTSE) && u->cts) + return; + if (v32(u->isr) & SBKF) { + start_frame(u, 0, 1, 0); + return; + } + if (u->ntx) { + u16 v = u->txq[0]; + memmove(u->txq, u->txq + 1, (size_t)(u->ntx - 1) * sizeof u->txq[0]); + u->ntx--; + flags(u); + start_frame(u, v, 0, 0); + } +} + +static void frame_end(struct uv2 *u) +{ + u->busy = 0; + u->left = 0; + if (u->brk) + isr_set(u, 0, SBKF); + u->brk = u->idle_frame = 0; + next_frame(u); + if (!u->busy) { + isr_set(u, TC, BUSY); + de_set(u, 0); + } + flags(u); +} + +static int rx_level(struct uv2 *u) +{ + int port, bit, lvl = 1; + if (esk_stm32_usartv2_pin(u->s, u->p->name, 0, &port, &bit) == 0 && u->s->host.pin_in && + !u->s->host.pin_in(u->s->host.ctx, port, bit, &lvl)) + lvl = 1; + return lvl != 0; +} + +static void sync_edges(struct uv2 *u, u64 elapsed) +{ + u32 c2 = v32(u->cr2); + int changed = 0; + while (u->ck_next < u->nck && u->ck_at[u->ck_next] <= elapsed) { + int first = !(u->ck_next & 1); + u->ck = first ? !(c2 & CPOL) : (c2 & CPOL) != 0; + if (u->ck_sample[u->ck_next]) { + if (rx_level(u)) + u->sync_rx |= (u16)(1u << u->sync_bits); + u->sync_bits++; + } + u->ck_next++; + changed = 1; + } + if (changed) + pins(u); +} + +/* ---- the device -------------------------------------------------------------- */ + +static void uv2_tick(void *ctx, u32 cycles) +{ + struct uv2 *u = (struct uv2 *)ctx; + if (u->idle_left) { + if (u->idle_left > cycles) { + u->idle_left -= cycles; + } else { + u->idle_left = 0; + if ((v32(u->cr1) & UE) && (v32(u->cr1) & RE)) { + if ((v32(u->isr) & RWU) && !(v32(u->cr1) & WAKE)) + isr_set(u, 0, RWU); /* an idle line wakes it */ + else if (!(v32(u->isr) & RWU)) + isr_set(u, IDLE, 0); + update_irq(u); + } + } + } + if (u->rto_left) { + if (u->rto_left > cycles) { + u->rto_left -= cycles; + } else { + u->rto_left = 0; + isr_set(u, RTOF, 0); + update_irq(u); + } + } + if (u->busy) { + u64 total = frame_cycles(u); + if (u->ck_next < u->nck) + sync_edges(u, total - (u->left > cycles ? u->left - cycles : 0)); + if (u->left > cycles) { + u->left -= cycles; + } else { + if (v32(u->cr2) & CLKEN) { + u->ck = (v32(u->cr2) & CPOL) != 0; + u->nck = u->ck_next = 0; + if (u->sync_bits && !u->idle_frame && !u->brk) + receive(u, u->sync_rx, 0); + pins(u); + } + frame_end(u); + update_irq(u); + dma_check(u); + } + } + run_clock(u); +} + +static int uv2_next(void *ctx, u32 *cycles) +{ + struct uv2 *u = (struct uv2 *)ctx; + u64 best = 0; + if (u->busy) { + best = u->left; + if (u->ck_next < u->nck) { + u64 elapsed = frame_cycles(u) - u->left, at = u->ck_at[u->ck_next]; + u64 c = at > elapsed ? at - elapsed : 1; + if (c < best) + best = c; + } + } + if (u->idle_left && (!best || u->idle_left < best)) + best = u->idle_left; + if (u->rto_left && (!best || u->rto_left < best)) + best = u->rto_left; + if (!best) + return 0; + *cycles = best > 0xffffffffu ? 0xffffffffu : (u32)best; + return 1; +} + +static void take_rx(struct uv2 *u) +{ + if (!u->nrx) + return; + memmove(u->rxq, u->rxq + 1, (size_t)(u->nrx - 1) * sizeof u->rxq[0]); + memmove(u->rxerr, u->rxerr + 1, (size_t)(u->nrx - 1)); + u->nrx--; + if (u->nrx) { + esk_rf_hw(u->rdr, u->rxq[0]); + isr_set(u, u->rxerr[0], 0); /* the next frame's errors show */ + } +} + +static u32 uv2_read(void *ctx, u32 off, int n) +{ + struct uv2 *u = (struct uv2 *)ctx; + u32 v; + if (off == esk_rf_off(u->rdr)) { + v = u->nrx ? u->rxq[0] : (u32)u->rdr->value; + if (u->s->bus.debug) + return v; + take_rx(u); + flags(u); + rts_update(u); + update_irq(u); + dma_check(u); + return v; + } + return esk_rf_read(u->p, off, n); +} + +static void enables(struct uv2 *u, u32 was) +{ + u32 c1 = v32(u->cr1); + u32 set = 0, clear = 0; + if ((c1 & UE) && (c1 & TE)) + set |= TEACK; + else + clear |= TEACK; + if ((c1 & UE) && (c1 & RE)) + set |= REACK; + else + clear |= REACK; + isr_set(u, set, clear); + if ((c1 & UE) && (c1 & TE) && !((was & UE) && (was & TE)) && !u->busy) + start_frame(u, 0x1ff, 0, 1); /* TE: an idle frame */ + if (!(c1 & UE)) { + /* disabled: the transmitter and receiver stop, their queues empty */ + u->ntx = u->nrx = 0; + u->busy = 0; + u->left = u->idle_left = u->rto_left = 0; + u->nck = u->ck_next = 0; + esk_rf_hw(u->isr, TXE | TC | TXFE); /* UE clear: the flags as at reset */ + de_set(u, 0); + } + if ((c1 & UE) != (was & UE) || (c1 & TE) != (was & TE)) + pins(u); +} + +static void uv2_write(void *ctx, u32 off, int n, u32 v) +{ + struct uv2 *u = (struct uv2 *)ctx; + u32 c1 = v32(u->cr1); + if (off == esk_rf_off(u->tdr)) { + if (!(c1 & UE)) + return; + if (u->ntx < depth(u)) { + u->txq[u->ntx++] = (u16)(v & 0x1ffu); + isr_set(u, 0, TC); + } + flags(u); + next_frame(u); + update_irq(u); + dma_check(u); + return; + } + if (off == esk_rf_off(u->icr)) { + u32 clr = v & (PE | FE | NE | ORE | IDLE | TC | LBDF | CTSIF | RTOF | (1u << 12) | CMF | WUF); + if (v & (1u << 7)) + clr |= 1u << 25; /* TCBGTCF */ + isr_set(u, 0, clr); + update_irq(u); + dma_check(u); + return; + } + if (off == esk_rf_off(u->rqr)) { + if (v & SBKRQ) { + isr_set(u, SBKF, 0); + next_frame(u); + } + if (v & MMRQ && (c1 & MME)) + isr_set(u, RWU, 0); + if (v & RXFRQ) { + u->nrx = 0; + isr_set(u, 0, RXNE); + } + if (v & TXFRQ) + u->ntx = 0; + flags(u); + rts_update(u); + update_irq(u); + dma_check(u); + return; + } + esk_rf_write(u->p, off, n, v); + if (off == esk_rf_off(u->cr1)) + enables(u, c1); + if (off == esk_rf_off(u->cr2) || off == esk_rf_off(u->cr1)) { + int ck = (v32(u->cr2) & CLKEN) && (v32(u->cr1) & UE) ? (v32(u->cr2) & CPOL) != 0 : -1; + if (ck != u->ck && u->ck_next >= u->nck) { + u->ck = ck; + pins(u); + } + } + flags(u); + rts_update(u); + run_clock(u); + update_irq(u); + dma_check(u); +} + +static void uv2_reset(void *ctx) +{ + struct uv2 *u = (struct uv2 *)ctx; + u->ntx = u->nrx = 0; + u->busy = u->brk = u->idle_frame = 0; + u->left = u->idle_left = u->rto_left = 0; + u->running = 0; + u->rts = 1; + u->de = 0; + u->ck = -1; + u->nck = u->ck_next = 0; +} + +const struct esk_dev_ops esk_stm32_usartv2_ops = { + "stm32-usart-v2", uv2_read, uv2_write, uv2_reset, uv2_tick, uv2_next, +}; + +/* ---- the pins -------------------------------------------------------------- */ + +static struct uv2 *uv2_named(struct esk_mach *s, const char *name) +{ + struct esk_rf_periph *p = s->rf ? esk_rf_periph(s->rf, name) : 0; + return p && p->ops == &esk_stm32_usartv2_ops && !esk_rf_gated(p) ? (struct uv2 *)p->ctx : 0; +} + +static struct uv2 *signal_of(struct esk_mach *s, const char *sig, const char **fn) +{ + char name[16]; + const char *us = strchr(sig, '_'); + size_t l = us ? (size_t)(us - sig) : 0; + if (!us || l >= sizeof name || (strncmp(sig, "USART", 5) && strncmp(sig, "UART", 4) && strncmp(sig, "LPUART", 6))) + return 0; + memcpy(name, sig, l); + name[l] = 0; + *fn = us + 1; + return uv2_named(s, name); +} + +int esk_stm32_usartv2_signal(struct esk_mach *s, const char *sig) +{ + const char *fn; + struct uv2 *u = signal_of(s, sig, &fn); + u32 c2; + if (!u || !(v32(u->cr1) & UE)) + return -1; + c2 = v32(u->cr2); + if (!strcmp(fn, (c2 & SWAP) ? "RX" : "TX")) + return (v32(u->cr1) & TE) || (v32(u->cr3) & HDSEL) ? 1 : -1; + if (!strcmp(fn, "DE") && (v32(u->cr3) & DEM)) + return u->de ? !(v32(u->cr3) & DEP) : (v32(u->cr3) & DEP) != 0; + if (!strcmp(fn, "RTS")) + return (v32(u->cr3) & RTSE) ? u->rts : -1; + if (!strcmp(fn, "CK")) + return u->ck; + return -1; +} + +void esk_stm32_usartv2_signal_input(struct esk_mach *s, const char *sig, int level) +{ + const char *fn; + struct uv2 *u = signal_of(s, sig, &fn); + if (!u || strcmp(fn, "CTS")) + return; + level = level != 0; + if (level == u->cts) + return; + u->cts = level; + isr_set(u, level ? 0 : CTS, level ? CTS : 0); /* CTS: the nCTS line's state, inverted */ + if (v32(u->cr3) & CTSE) { + isr_set(u, CTSIF, 0); + next_frame(u); + update_irq(u); + } +} + +int esk_stm32_usartv2_pin(struct esk_mach *s, const char *unit, int tx, int *port, int *bit) +{ + struct uv2 *u = uv2_named(s, unit); + char sig[24]; + int at; + if (u && !tx && (v32(u->cr3) & HDSEL)) + tx = 1; + if (u && (v32(u->cr2) & SWAP)) + tx = !tx; + snprintf(sig, sizeof sig, "%s_%s", unit, tx ? "TX" : "RX"); + at = esk_stm32f4_af_pin(s, sig); + if (at < 0) + return -1; + *port = at / 32; + *bit = at % 32; + return 0; +} + +void *esk_stm32_usartv2_create(struct esk_mach *s, struct esk_rf_periph *p) +{ + struct uv2 *u; + if (!esk_rf_reg(p, "ISR") || !esk_rf_reg(p, "ICR") || !esk_rf_reg(p, "TDR") || !esk_rf_reg(p, "RDR") || + !esk_rf_reg(p, "CR1") || !esk_rf_reg(p, "BRR")) + return 0; + u = (struct uv2 *)esk_mach_alloc(s, sizeof *u); + if (!u) + return 0; + u->s = s; + u->p = p; + u->cr1 = esk_rf_reg(p, "CR1"); + u->cr2 = esk_rf_reg(p, "CR2"); + u->cr3 = esk_rf_reg(p, "CR3"); + u->brr = esk_rf_reg(p, "BRR"); + u->rtor = esk_rf_reg(p, "RTOR"); + u->rqr = esk_rf_reg(p, "RQR"); + u->isr = esk_rf_reg(p, "ISR"); + u->icr = esk_rf_reg(p, "ICR"); + u->rdr = esk_rf_reg(p, "RDR"); + u->tdr = esk_rf_reg(p, "TDR"); + u->presc = esk_rf_reg(p, "PRESC"); + if (!u->cr2 || !u->cr3) + return 0; + u->lp = !strncmp(p->name, "LPUART", 6); + u->irq = esk_rf_irq(p, 0); + /* ISR is the hardware's: its flags are cleared through ICR, RQR */ + esk_rf_set_acc(u->isr, ~(u64)0, ESK_ACC_RO); + esk_rf_set_acc(u->icr, ~(u64)0, ESK_ACC_WO); + esk_rf_set_acc(u->rdr, ~(u64)0, ESK_ACC_RO); + esk_rf_set_reset(u->isr, TXE | TC | TXFE); + uv2_reset(u); + u->cts = 1; + snprintf(u->sig_tx, sizeof u->sig_tx, "%s_TX", p->name); + snprintf(u->sig_rx, sizeof u->sig_rx, "%s_RX", p->name); + s->uart_pin = esk_stm32_usartv2_pin; + esk_mach_rx_port(s, p->name, uv2_room, uv2_put, uv2_bit_cycles, u); + esk_mach_rx_frames(s, uv2_format, uv2_put_frame, uv2_started); + return u; +} diff --git a/core/mcu/stm32/wdg.c b/core/mcu/stm32/wdg.c index e00397717..7ceb528d0 100644 --- a/core/mcu/stm32/wdg.c +++ b/core/mcu/stm32/wdg.c @@ -12,12 +12,19 @@ * is lost). At 0 it resets the part (IWDGRSTF): it runs until a reset * stops it; * - with the option bytes' hardware watchdog (WDG_SW 0 in their user - * byte, which the part loads into FLASH's option register at reset) it - * starts by itself at every reset. + * byte, which the part loads into FLASH's option register at reset; a + * G4's IWDG_SW in OPTR) it starts by itself at every reset; + * - the window (a G4's WINR, RM0440 41): a refresh while the counter is + * above WINR resets the part; writing WINR reloads the counter, the + * value reaching the counter's domain five LSI clocks later (WVU); + * WINR's reset value 0xFFF leaves the window open; + * - a G4's option bytes' IWDG_STOP and IWDG_STDBY cleared freeze the + * counter in Stop and in Standby. * * The WWDG: * - its 7-bit counter (CR.T) counts down every 4096 x 2^WDGTB PCLK1 - * clocks while its clock is on; CFR holds the window W and EWI; + * clocks while its clock is on (WDGTB 2 bits at CFR[8:7], a G4's 3 at + * CFR[13:11]); CFR holds the window W and EWI; * - once WDGA is set (it clears only with a reset) the part resets * (WWDGRSTF) when T6 clears (0x40 to 0x3F), when CR is written with T6 * clear, or when CR is written while the counter is above W; @@ -38,20 +45,21 @@ #define KR_ACCESS 0x5555u #define SR_PVU (1u << 0) #define SR_RVU (1u << 1) +#define SR_WVU (1u << 2) /* ---- IWDG ------------------------------------------------------------------------ */ struct iwdg { struct esk_mach *s; struct esk_rf_periph *p; - struct esk_rf_reg *kr, *pr, *rlr, *sr; + struct esk_rf_reg *kr, *pr, *rlr, *sr, *winr; int running, on, access; - u32 count, pr_now, rlr_now; + u32 count, pr_now, rlr_now, winr_now; u64 acc; /* core cycles x LSI_HZ toward the next count */ u64 since; - u32 upd; /* PVU/RVU: bits waiting */ + u32 upd; /* PVU/RVU/WVU: bits waiting */ u64 upd_left; /* core cycles until they land */ - u32 pr_new, rlr_new; + u32 pr_new, rlr_new, winr_new; }; static u32 reg(const struct esk_rf_reg *r) { return r ? (u32)r->value : 0; } @@ -88,12 +96,27 @@ static void iw_start(struct iwdg *w) * watchdog stops while a debugger holds the core halted */ static int frozen(const struct esk_mach *s, int bit) { return s->dbg.halted && (s->dbg.fz[0] >> bit & 1u); } +/* a G4's option bytes' IWDG_STOP (OPTR bit 17) or IWDG_STDBY (18) clear: + * the counter frozen in Stop or Standby */ +static int option_frozen(const struct esk_mach *s) +{ + struct esk_rf_periph *f; + struct esk_rf_reg *optr; + if (!s->clocks_stopped || !s->rf) + return 0; + f = esk_rf_periph(s->rf, "FLASH"); + optr = f ? esk_rf_reg(f, "OPTR") : 0; + if (!optr || !esk_rf_mask(optr, "IWDG_SW")) + return 0; + return !(optr->value >> (esk_stm32f4_pwr_standby((struct esk_mach *)s) ? 18 : 17) & 1u); +} + static void iw_tick(void *ctx, u32 cycles) { struct iwdg *w = (struct iwdg *)ctx; if (!w->running) return; - if (frozen(w->s, 12)) { + if (frozen(w->s, 12) || option_frozen(w->s)) { w->since = 0; return; } @@ -107,6 +130,11 @@ static void iw_tick(void *ctx, u32 cycles) w->pr_now = w->pr_new; if (w->upd & SR_RVU) w->rlr_now = w->rlr_new; + if (w->upd & SR_WVU) { + w->winr_now = w->winr_new; + w->count = w->rlr_now & 0xfffu; /* writing WINR reloads the counter */ + w->acc = 0; + } w->upd = 0; esk_rf_hw(w->sr, 0); } @@ -134,7 +162,7 @@ static int iw_next(void *ctx, u32 *cycles) { struct iwdg *w = (struct iwdg *)ctx; u64 best = ~(u64)0; - if (!w->running || frozen(w->s, 12)) + if (!w->running || frozen(w->s, 12) || option_frozen(w->s)) return 0; if (w->on) { u64 need = ((u64)w->count + 1) * iw_unit(w); @@ -165,6 +193,15 @@ static void iw_write(void *ctx, u32 off, int n, u32 v) if (key == KR_START) iw_start(w); else if (key == KR_RELOAD && w->on) { + if (w->winr && w->count > (w->winr_now & 0xfffu) && !w->s->reset_req) { + /* refreshed before the window opened */ + esk_rf_diag(w->s, ES_SEV_INFO, "mcu.watchdog_reset", "%s", + "the independent watchdog was refreshed outside its window: it resets the part"); + w->s->reset_cause = ESK_RESET_WATCHDOG; + w->s->reset_req = 1; + w->s->yield = 1; + return; + } w->count = w->rlr_now & 0xfffu; w->acc = 0; } @@ -180,6 +217,10 @@ static void iw_write(void *ctx, u32 off, int n, u32 v) w->rlr_new = v & 0xfffu; esk_rf_hw(w->rlr, w->rlr_new); w->upd |= SR_RVU; + } else if (w->winr && off == esk_rf_off(w->winr) && !(w->upd & SR_WVU)) { + w->winr_new = v & 0xfffu; + esk_rf_hw(w->winr, w->winr_new); + w->upd |= SR_WVU; } else { return; } @@ -197,7 +238,10 @@ static int hardware_watchdog(struct esk_mach *s) { struct esk_rf_periph *f = s->rf ? esk_rf_periph(s->rf, "FLASH") : 0; struct esk_rf_reg *optcr = f ? esk_rf_reg(f, "OPTCR") : 0, *obr = f ? esk_rf_reg(f, "OBR") : 0; + struct esk_rf_reg *optr = f ? esk_rf_reg(f, "OPTR") : 0; u32 v = 0; + if (optr && esk_rf_mask(optr, "IWDG_SW")) + return !(optr->value & esk_rf_mask(optr, "IWDG_SW")); /* a G4's, loaded by flash_g4.c */ if (optcr && esk_rf_mask(optcr, "WDG_SW") && !esk_bus_debug_read(&s->bus, 0x1FFFC000u, 2, &v)) { esk_rf_hw(optcr, (optcr->value & ~(u64)0xffecu) | (v & 0xffecu)); /* RDP, USER, BOR_LEV */ return !(v & 0x20u); @@ -217,6 +261,7 @@ static void iw_reset(void *ctx) w->upd = 0; w->pr_now = 0; w->rlr_now = 0xfffu; + w->winr_now = 0xfffu; w->count = 0xfffu; w->acc = 0; w->since = 0; @@ -244,9 +289,11 @@ void *esk_stm32_iwdg_create(struct esk_mach *s, struct esk_rf_periph *p) w.pr = esk_rf_reg(p, "PR"); w.rlr = esk_rf_reg(p, "RLR"); w.sr = esk_rf_reg(p, "SR"); + w.winr = esk_rf_reg(p, "WINR"); if (!w.kr || !w.pr || !w.rlr || !w.sr) return 0; w.rlr_now = 0xfffu; + w.winr_now = 0xfffu; w.count = 0xfffu; p->always_on = 1; /* on LSI: it counts through Stop and Standby */ c = (struct iwdg *)esk_mach_alloc(s, sizeof *c); @@ -276,7 +323,11 @@ static u64 ww_unit(const struct wwdg *w) { u32 core = esk_mach_core_hz(w->s), pclk = esk_stm32_pclk(w->s, 1); u64 ratio = core && pclk && core >= pclk ? core / pclk : 1; - return ratio * ((u64)4096u << (reg(w->cfr) >> 7 & 3u)); + u64 tb = esk_rf_mask(w->cfr, "WDGTB"); + u32 sh = 0; + while (tb && !(tb >> sh & 1)) + sh++; + return ratio * ((u64)4096u << (tb ? (u32)((reg(w->cfr) & tb) >> sh) : (reg(w->cfr) >> 7 & 3u))); } /* the counter now (T[6:0]); its clock off: as it was */ @@ -384,7 +435,7 @@ static void ww_write(void *ctx, u32 off, int n, u32 v) } else if (off == esk_rf_off(w->cfr)) { u32 keep = reg(w->cfr) & CFR_EWI; /* EWI only sets */ u32 t = ww_count(w); - esk_rf_hw(w->cfr, (v & 0x3ffu) | keep); + esk_rf_hw(w->cfr, (v & (u32)esk_rf_fields(w->cfr)) | keep); ww_rebase(w, t); } else if (off == esk_rf_off(w->sr)) { if (!(v & SR_EWIF)) diff --git a/core/project/loader.c b/core/project/loader.c index b4cec2bf2..ad84572c5 100644 --- a/core/project/loader.c +++ b/core/project/loader.c @@ -776,7 +776,7 @@ static es_status join_ties(graph *g, esk_comp *c) /* the board's firmware on its MCU's runtime (SPEC-009): the image, the register * description beside the MCU description, the board's oscillator */ -#define LD_MAX_FILES 4 +#define LD_MAX_FILES 8 /* the MCU's memory regions' factory files (a boot ROM's image), checked * against their SHA-256: n of them in files[], their bytes to be freed */ @@ -819,6 +819,51 @@ static int read_memory_files(es_session *s, const esk_board_inst *bi, const esk_ return n; } +static int hex_nibble(char c) +{ + return c >= '0' && c <= '9' ? c - '0' : c >= 'a' && c <= 'f' ? c - 'a' + 10 : c >= 'A' && c <= 'F' ? c - 'A' + 10 : -1; +} + +/* the MCU's memory as the board ships it (board.json's mcu.memory: the + * option bytes ST programs on a NUCLEO-G474RE), after the MCU's own: + * appended to files[], their bytes to be freed */ +static int board_memory(es_session *s, const esk_board_inst *bi, const esk_json *board_desc, esk_mcu_file *files, + int n) +{ + const esk_json *mem = esk_json_get(esk_json_get(board_desc, "mcu"), "memory"); + size_t i; + for (i = 0; i < esk_json_len(mem) && n < LD_MAX_FILES; i++) { + const esk_json *r = esk_json_at(mem, i); + const char *hex = esk_json_get_str(r, "bytes", NULL); + size_t len = hex ? strlen(hex) / 2 : 0, k; + u64 base = 0; + char *data; + if (!hex || !len || esk_json_to_u64(esk_json_get(r, "base"), &base)) + continue; + data = (char *)esk_malloc(s->a, len + 1); + if (!data) + break; + for (k = 0; k < len; k++) { + int hi = hex_nibble(hex[2 * k]), lo = hex_nibble(hex[2 * k + 1]); + if (hi < 0 || lo < 0) { + esk_diag_raise(&s->diag, ES_SEV_ERROR, "mcu.memory_file", 0, "board", bi->id, NULL, 0, + "%s: the board's mcu.memory at 0x%08x is not hexadecimal", bi->id, (unsigned)base); + break; + } + data[k] = (char)(hi << 4 | lo); + } + if (k < len) { + esk_free(s->a, data, len + 1); + continue; + } + files[n].base = (u32)base; + files[n].data = (const unsigned char *)data; + files[n].len = len; + n++; + } + return n; +} + /* an ELF image older than a source its line tables name was built before * that source last changed (issue #91): a warning, never a refusal, since a * touched-but-unchanged file looks the same. A minute of slack keeps a fresh @@ -949,6 +994,7 @@ static es_status attach_firmware(es_session *s, esk_board_inst *bi, const esk_ca su.console = esk_json_get_str(esk_json_get(mi->desc, "console"), "default", "USART1"); su.quantum_ps = s->core_quantum_ps; nfiles = read_memory_files(s, bi, mi, files); + nfiles = board_memory(s, bi, board->desc, files, nfiles); su.files = files; su.nfiles = nfiles; { diff --git a/core/util/diag_fr.c b/core/util/diag_fr.c index de775c3f3..b08ecf6cf 100644 --- a/core/util/diag_fr.c +++ b/core/util/diag_fr.c @@ -258,9 +258,13 @@ static const fr_row rows[] = { { "mcu.lockup", "the core locked up: %s%s", "le cœur s'est bloqué (lockup) : %s%s" }, { "mcu.low_power_reset", "the option bytes' nRST_STDBY is 0: entering Standby resets the part", "nRST_STDBY des octets d'option vaut 0 : entrer en Standby réinitialise la puce" }, + { "mcu.low_power_reset", "the option bytes' nRST_SHDW is 0: entering Shutdown resets the part", + "le nRST_SHDW des octets d'option vaut 0 : entrer en mode Shutdown réinitialise la puce" }, { "mcu.low_power_reset", "the option bytes' nRST_STOP is 0: entering Stop resets the part", "nRST_STOP des octets d'option vaut 0 : entrer en Stop réinitialise la puce" }, { "mcu.memory_file", "%s: %s cannot be read", "%s : impossible de lire %s" }, + { "mcu.memory_file", "%s: the board's mcu.memory at 0x%08x is not hexadecimal", + "%s : le mcu.memory de la carte à 0x%08x n'est pas en hexadécimal" }, { "mcu.memory_file", "%s: %s is not the file the description names (sha256 %s)", "%s : %s n'est pas le fichier que nomme la description (sha256 %s)" }, { "mcu.model_missing", "no behavioural model yet for %s: those peripherals are plain registers", @@ -301,6 +305,8 @@ static const fr_row rows[] = { "OTG_FS : la FIFO de réception est lue sans qu'aucune donnée de paquet n'ait été prise (GRXSTSP d'abord)" }, { "mcu.watchdog_reset", "the always-on watchdog's comparator fired with wdogrsten set: it resets the chip", "le comparateur du chien de garde toujours alimenté s'est déclenché avec wdogrsten positionné : il réinitialise la puce" }, + { "mcu.watchdog_reset", "the independent watchdog was refreshed outside its window: it resets the part", + "le chien de garde indépendant a été rafraîchi hors de sa fenêtre : il réinitialise la puce" }, { "mcu.watchdog_reset", "the independent watchdog counted down to 0: it resets the part", "le chien de garde indépendant a décompté jusqu'à 0 : il réinitialise la puce" }, { "mcu.watchdog_reset", "the watchdog timed out in system reset mode: it resets the part", diff --git a/docs/coverage.md b/docs/coverage.md index ad9dc481a..051a02b8c 100644 --- a/docs/coverage.md +++ b/docs/coverage.md @@ -19,6 +19,7 @@ evidence for each model is in [STATUS.md](STATUS.md). | STM32F103C8 | 26 | 0 | 1 | 27 | | STM32F446RE | 53 | 0 | 15 | 68 | | STM32F446ZE | 53 | 0 | 15 | 68 | +| STM32G474RE | 34 | 0 | 48 | 82 | ## ESP32 (`espressif/esp32`) @@ -577,3 +578,95 @@ Boards: NUCLEO-F446ZE (STM32F446ZE). | DBG | `stm32f4-dbgmcu` | modelled | Declared omissions: DBGMCU's freeze bits for the RTC, the I2C SMBus time-outs and CAN (they run on while the core is halted); TRACE_IOEN and TRACE_MODE (no trace port); the debug monitor exception (DEMCR's MON_ bits), C_SNAPSTALL, the FPB's flash patching (FP_REMAP), the DWT's counters other than CYCCNT, PC sampling, data value matching and linked comparators, the ITM's timestamp, synchronisation and overflow packets and the DWT's packets (PC sampling, exception and data trace), the TPIU's parallel trace port and formatter (SWO is modelled: cortexm/itm.c); a halted core draws its sleep current; watchdogs: LSI's spread (32 kHz here), the debug freeze bits (a debugger's halt stops all of the machine's time); the WWDG's counter while WDGA is clear counts from the last access made while its clock is on; RTC: the reference clock detection (REFCKON, RTC_REFIN), RTC_AF2 (PI8, not bonded), the tamper input's precharge and pull-up, the 8 and 16 s calibration windows (the rate is applied evenly), RECALPF's wait; ADC: the start-up time after ADON (conversions are exact at once), the input's source impedance against the sampling time, the converter's offset, gain, linearity errors and noise (the code is the ideal one), the die's self-heating; DAC: the buffer's offset and gain errors and load regulation, the conversion's non-linearity; I2C: FLTR's analog and digital noise filters (the circuit's edges are taken as they come), the SMBus's cumulative clock low extensions (TLOW:SEXT, TLOW:MEXT), clock synchronization between two masters, TRISE's rise time compensation, CR2.FREQ (times come from the real PCLK1); FMPI2C1 (another IP) keeps its registers; SPI: I2S (I2SCFGR's I2SMOD keeps its value and the SPI stays an SPI; no catalog part speaks I2S), the TI slave's MISO release half a clock after the last bit (let go at the frame's end); DMA: the arbitration's delays between streams (a request is served at once), the direct mode and FIFO overrun/underrun errors (DMEIF never sets, FEIF only for the configuration error), the peripheral flow controller (PFCTRL), the bus matrix's timing (memory-to-memory moves an item every two cycles); dma_requests omits SAI2's and SPI4's requests; USART: noise detection (one sample a bit: NF never sets, ONEBIT changes nothing), smartcard mode (SCEN, NACK, GTPR) and IrDA (IREN, IRLP), which no catalog part speaks; timers: TIM5's TI4 on the RTC's wake-up interrupt (IT4_RMP 11) and TIM2's ITR1 on the OTG controllers' SOF, MSM's delay, the idle levels' dead time after a break, OCxFE; TIMx_CCy as an ADC trigger is OCyREF for an output channel and a pulse at a capture or a frozen channel's match; SysTick: STK_CALIB's TENMS (RM0390's value not taken: it reads 0 with SKEW set); GPIO: EVENTOUT (AF15, SEV's pulse), the I/O compensation cell's effect on the edges; SYSCFG: the FMC memories MEMRMP can map at 0 (none is on the bus), PMC's ADC DC2 bits' effect; EXTI: the internal lines' sources but the RTC's (the PVD, the USB OTG controllers' wake-ups) until their models land; SWIER triggers them; RCC: the clock security system's detection (CSSON is kept; the board's HSE never fails), a peripheral held in reset while its *RSTR bit stays set (its reset happens on the write), the brownout reset (BORRSTF only at power-on), the start-up times' spread between parts and with temperature and LSEMOD's drive level (the typical times always), MCO1 and MCO2 on their pins, and the I2S, SAI, SPDIF-RX, CEC and FMPI2C clocks from PLLI2S and PLLSAI (DCKCFGR, DCKCFGR2) beyond TIMPRE and the 48 MHz clock's CK48MSEL (PLL_Q or PLLSAI_P, which the USB OTG FS core needs); PWR: the regulator's settling times and the low-power modes' wake-up times (DS10693's low-power mode wake-up timings: the core runs at the wake-up event), the regulator's settings (LPDS, FPDS, LPLVDS, MRLVDS: the supply current is not modelled), the programmable voltage detector, DBG_STOP's clocks (with it set, a probe reaches the part in Stop, but HCLK is not kept running from HSI), the tamper and timestamp pin in Standby beyond RTC_OUT; DWT's CYCCNT counts through Stop; CAN, SDIO, QUADSPI, SAI, SPDIF-RX, HDMI-CEC, DCMI, FMC, FMPI2C and the USB OTG HS controller; USB OTG FS: the ID pin, SRP and HNP, split transactions through a hub, isochronous endpoints' frame parity and incomplete-transfer interrupts and a host's isochronous channels, FRMOR, LPM, GCCFG's battery-charging detection, the OTG_FS_WKUP interrupt through EXTI line 18, the SOF pulse on PA8; the device's turnaround inside a transaction (a transaction is whole), a host channel's OUT data kept per channel rather than in the shared FIFO's order (the words free are the same); GSNPSID reads 0x4F54320A (core 3.20a), the value TinyUSB's dwc2_info table measures on the F412's and F76x's OTG_FS, the same generation of the core (ST's HAL groups the F446 with the F412, F413 and F469); no ST document gives it and it was not read from an F446; flash: the times' spread and their maximum values (the typical ones always), the ART accelerator's cache hits during an operation (a program in the flash stalls whatever its cache holds), a program in SRAM whose interrupt handler is in the flash (it does not stall), the option bytes' programming time (OPTSTRT is done at once), a reset during an operation leaving the memory half-programmed, HCLK's 1 MHz minimum, the read protection's levels (RDP stored, no mass erase on a regression), PCROP's read refusal (RDERR), the ART accelerator's caches (DCRST, ICRST); CRC: the bus stall of a DR access while a word is computed (four AHB clocks), and a byte or halfword write to DR, which RM0390 does not allow, feeding its value zero-extended. + +## STM32G474RE (`st/stm32g474re`) + +Boards: NUCLEO-G474RE. +34 of 82 peripherals modelled, 0 registers only, 48 missing. + +| Peripheral | Model | State | +|---|---|---| +| TIM2 | `stm32-tim` | modelled | +| TIM3 | `stm32-tim` | modelled | +| TIM4 | `stm32-tim` | modelled | +| TIM5 | `stm32-tim` | modelled | +| TIM6 | `stm32-tim` | modelled | +| TIM7 | `stm32-tim` | modelled | +| CRS | — | **missing** | +| TAMP | — | **missing** | +| RTC | — | **missing** | +| WWDG | `stm32-wwdg` | modelled | +| IWDG | `stm32-iwdg` | modelled | +| SPI2 | — | **missing** | +| SPI3 | — | **missing** | +| USART2 | `stm32-usart-v2` | modelled | +| USART3 | `stm32-usart-v2` | modelled | +| UART4 | `stm32-usart-v2` | modelled | +| UART5 | `stm32-usart-v2` | modelled | +| I2C1 | — | **missing** | +| I2C2 | — | **missing** | +| USB_FS_device | — | **missing** | +| FDCAN1 | — | **missing** | +| FDCAN2 | — | **missing** | +| FDCAN3 | — | **missing** | +| PWR | `stm32g4-pwr` | modelled | +| I2C3 | — | **missing** | +| LPTIM1 | — | **missing** | +| LPUART1 | `stm32-usart-v2` | modelled | +| I2C4 | — | **missing** | +| UCPD1 | — | **missing** | +| SYSCFG | `stm32f4-syscfg` | modelled | +| VREFBUF | — | **missing** | +| COMP | — | **missing** | +| OPAMP | — | **missing** | +| EXTI | `stm32-exti` | modelled | +| TIM1 | `stm32-tim` | modelled | +| SPI1 | — | **missing** | +| TIM8 | `stm32-tim` | modelled | +| USART1 | `stm32-usart-v2` | modelled | +| SPI4 | — | **missing** | +| TIM15 | `stm32-tim` | modelled | +| TIM16 | `stm32-tim` | modelled | +| TIM17 | `stm32-tim` | modelled | +| TIM20 | `stm32-tim` | modelled | +| SAI | — | **missing** | +| HRTIM_Master | — | **missing** | +| HRTIM_TIMA | — | **missing** | +| HRTIM_TIMB | — | **missing** | +| HRTIM_TIMC | — | **missing** | +| HRTIM_TIMD | — | **missing** | +| HRTIM_TIME | — | **missing** | +| HRTIM_TIMF | — | **missing** | +| HRTIM_Common | — | **missing** | +| DMA1 | — | **missing** | +| DMA2 | — | **missing** | +| DMAMUX | — | **missing** | +| CORDIC | — | **missing** | +| RCC | `stm32g4-rcc` | modelled | +| FMAC | — | **missing** | +| FLASH | `stm32g4-flash` | modelled | +| CRC | `stm32-crc` | modelled | +| GPIOA | `stm32f4-gpio` | modelled | +| GPIOB | `stm32f4-gpio` | modelled | +| GPIOC | `stm32f4-gpio` | modelled | +| GPIOD | `stm32f4-gpio` | modelled | +| GPIOE | `stm32f4-gpio` | modelled | +| GPIOF | `stm32f4-gpio` | modelled | +| GPIOG | `stm32f4-gpio` | modelled | +| ADC1 | — | **missing** | +| ADC2 | — | **missing** | +| ADC12_Common | — | **missing** | +| ADC3 | — | **missing** | +| ADC4 | — | **missing** | +| ADC5 | — | **missing** | +| ADC345_Common | — | **missing** | +| DAC1 | — | **missing** | +| DAC2 | — | **missing** | +| DAC3 | — | **missing** | +| DAC4 | — | **missing** | +| RNG | — | **missing** | +| FMC | — | **missing** | +| QUADSPI | — | **missing** | +| DBGMCU | `stm32f4-dbgmcu` | modelled | + +Declared omissions: the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, DMA1, DMA2 and DMAMUX, the I2Cs and SPIs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC; the timers' G4 additions: OCxM's fourth bit (retriggerable one-pulse, combined and asymmetric PWM), SMS's fourth bit (combined reset and trigger, the extended encoder modes), the internal trigger inputs ITR4 to ITR10 and TS's fifth bit, MMS's fourth bit, channels 5 and 6, dithering (DITHEN: ARR and CCRx read as their 16 integer bits), UIFREMAP, the encoder index (ECR), the asymmetric dead times (DTR2), break 2, the comparators on TISEL and AF1/AF2's break sources, the G4's ITR interconnection table (the F4's is used); the start-up times, flash times and PVD thresholds are DS12288's typical values as transcribed without the datasheet at hand (HSI16 0.8 us, an HSE crystal 2 ms, LSI 80 us, LSE 2 s, HSI48 2.5 us, the PLL's lock 15 us; a double word 81.7 us, a fast row 2.61 ms, a page erase 22.02 ms, a bank erase 22.13 ms; the PVD at 2.0 to 2.9 V), and their spread and dependence on temperature are not modelled; RCC: the clock security systems (CSSON, LSECSSON: the oscillators never fail), LSEDRV, HSITRIM and HSI48CAL's effect on the frequencies, the CRS's trimming, a peripheral held in reset while its *RSTR bit stays set, the brownout reset (BORRSTF only at power-on), the sleep-mode enables (*SMENR), MCO and LSCO on their pins; PWR: the regulator's settling (VOSF never set) and the wake-up times, the supply currents, the PVMs (VDDA is VDD), UCPD's dead-battery bits, VBAT charging; FLASH: the option bytes' programming time, the read protection's levels and their mass erase, PCROP and the securable area, ECC, the bank swap (BFB2, FB_MODE), the boot from SRAM, the power-down modes, the caches' real line length; USART: noise detection (NE never sets, ONEBIT does nothing), auto baud rate detection, TXINV and RXINV, DE's assertion and deassertion times (DEAT, DEDT), the synchronous slave, smartcard and IrDA modes, TCBGT; SYSCFG: SWPR's write protection of the CCM SRAM, its erase time, the parity errors CFGR2 reports; EXTI: the internal lines' sources but PVD's; GPIO: EVENTOUT, the I/O compensation, the 5 V tolerant pins' clamps; the electrical I/O values (io.electrical) are the F446's and DS12288's typical ones, not checked against the datasheet's tables; the package code at 0x1FFF7500 reads erased; DBGMCU's REV_ID 0x2001 (the silicon revision is assumed); a halted core draws its sleep current. diff --git a/schemas/board.schema.json b/schemas/board.schema.json index 922e42082..da44e86b6 100644 --- a/schemas/board.schema.json +++ b/schemas/board.schema.json @@ -24,7 +24,21 @@ "version": {"$ref": "common.schema.json#/$defs/version_range"}, "package": {"type": "string", "pattern": "^[a-z][a-z0-9_-]*$"}, "instance": {"$ref": "common.schema.json#/$defs/instance_id"}, - "fuses": {"$ref": "common.schema.json#/$defs/fuses"} + "fuses": {"$ref": "common.schema.json#/$defs/fuses"}, + "memory": { + "type": "array", + "description": "The MCU's memory as the board ships it, written over the MCU description's factory contents (the option bytes ST programs on a NUCLEO-G474RE): an address and its bytes", + "items": { + "type": "object", + "required": ["base", "bytes"], + "additionalProperties": false, + "properties": { + "base": {"$ref": "common.schema.json#/$defs/hex_or_size"}, + "bytes": {"type": "string", "pattern": "^([0-9A-Fa-f]{2})+$"}, + "doc": {"type": "string"} + } + } + } } }, "oscillators": { diff --git a/tests/unit/test_stm32g4.c b/tests/unit/test_stm32g4.c new file mode 100644 index 000000000..18b303391 --- /dev/null +++ b/tests/unit/test_stm32g4.c @@ -0,0 +1,782 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* Copyright 2026 Junior Deogracias */ +/* test_stm32g4.c -- the STM32G474RE on the machine the catalog's + * description builds, with the NUCLEO-G474RE's clocks (a 24 MHz crystal on + * OSC_IN/OSC_OUT, the 32.768 kHz LSE crystal): its clock tree and power + * control (rcc_g4.c, pwr_g4.c), flash interface (flash_g4.c), GPIO, SYSCFG + * and EXTI (gpio_f4.c, syscfg_f4.c, exti.c), its USARTs and LPUART + * (usart_v2.c), the programmable CRC (crc.c) and the watchdogs (wdg.c). + * The program's accesses are made from here in the order STM32CubeG4's HAL + * makes them (RM0440). */ +#include "harness.h" +#include "mcu/build.h" +#include "mcu/cortexm/cortexm.h" +#include "mcu/stm32/stm32.h" +#include "util/json.h" + +#define RCC 0x40021000u +#define RCC_CR (RCC + 0x00u) +#define RCC_CFGR (RCC + 0x08u) +#define RCC_PLLCFGR (RCC + 0x0Cu) +#define RCC_CIER (RCC + 0x18u) +#define RCC_CIFR (RCC + 0x1Cu) +#define RCC_CICR (RCC + 0x20u) +#define RCC_AHB1ENR (RCC + 0x48u) +#define RCC_AHB2ENR (RCC + 0x4Cu) +#define RCC_APB1ENR1 (RCC + 0x58u) +#define RCC_APB1ENR2 (RCC + 0x5Cu) +#define RCC_APB2ENR (RCC + 0x60u) +#define RCC_CCIPR (RCC + 0x88u) +#define RCC_BDCR (RCC + 0x90u) +#define RCC_CSR (RCC + 0x94u) +#define RCC_CRRCR (RCC + 0x98u) +#define PWR 0x40007000u +#define PWR_CR1 (PWR + 0x00u) +#define PWR_CR3 (PWR + 0x08u) +#define PWR_SR1 (PWR + 0x10u) +#define PWR_SR2 (PWR + 0x14u) +#define PWR_SCR (PWR + 0x18u) +#define PWR_CR5 (PWR + 0x80u) +#define FLASH 0x40022000u +#define FLASH_ACR (FLASH + 0x00u) +#define FLASH_KEYR (FLASH + 0x08u) +#define FLASH_OPTKEYR (FLASH + 0x0Cu) +#define FLASH_SR (FLASH + 0x10u) +#define FLASH_CR (FLASH + 0x14u) +#define FLASH_OPTR (FLASH + 0x20u) +#define FLASH_WRP1AR (FLASH + 0x2Cu) +#define GPIOA 0x48000000u +#define GPIOC 0x48000800u +#define MODER 0x00u +#define PUPDR 0x0Cu +#define IDR 0x10u +#define ODR 0x14u +#define BSRR 0x18u +#define AFRL 0x20u +#define BRR 0x28u +#define SYSCFG 0x40010000u +#define EXTI 0x40010400u +#define LPUART1 0x40008000u +#define USART1 0x40013800u +#define U_CR1 0x00u +#define U_CR2 0x04u +#define U_CR3 0x08u +#define U_BRR 0x0Cu +#define U_RQR 0x18u +#define U_ISR 0x1Cu +#define U_ICR 0x20u +#define U_RDR 0x24u +#define U_TDR 0x28u +#define CRC 0x40023000u +#define IWDG 0x40003000u +#define WWDG 0x40002C00u +#define DBGMCU 0xE0042000u +#define NVIC_ISPR1 0xE000E204u +#define NVIC_ISPR2 0xE000E208u + +typedef struct g4 { + esk_alloc a; + esk_json *mcu, *regs; + struct esk_mach m; + int warnings; + char codes[256]; + esk_mach_pin pin[7][16]; + int ext[7][16]; + struct { int c, nbits, stop; u32 bits, bit_cycles; char unit[12]; } frame[32]; + int nframe; +} g4; + +static unsigned char *slurp(const char *rel, size_t *len) +{ + char path[1024]; + FILE *f; + unsigned char *buf; + long n; + snprintf(path, sizeof path, "%s/%s", EMBSIM_SOURCE_DIR, rel); + f = fopen(path, "rb"); + if (!f) + return NULL; + fseek(f, 0, SEEK_END); + n = ftell(f); + fseek(f, 0, SEEK_SET); + buf = (unsigned char *)malloc(n > 0 ? (size_t)n : 1); + if (buf && fread(buf, 1, (size_t)n, f) != (size_t)n) { + free(buf); + buf = NULL; + } + fclose(f); + *len = (size_t)n; + return buf; +} + +static esk_json *load_json(esk_alloc *a, const char *rel) +{ + size_t len = 0; + unsigned char *text = slurp(rel, &len); + esk_json *j; + int line = 0; + const char *err = NULL; + if (!text) + return NULL; + j = esk_json_parse(a, (const char *)text, len, &line, &err); + free(text); + return j; +} + +static void r_diag(void *ctx, int sev, const char *code, const char *msg) +{ + g4 *f = (g4 *)ctx; + size_t n = strlen(f->codes); + (void)msg; + if (sev < ES_SEV_WARNING) + return; + f->warnings++; + snprintf(f->codes + n, sizeof f->codes - n, "%s ", code); +} + +static void r_pin_cfg(void *ctx, int port, int bit, const esk_mach_pin *cfg) +{ + g4 *f = (g4 *)ctx; + if (port >= 0 && port < 7 && bit >= 0 && bit < 16) + f->pin[port][bit] = *cfg; +} + +static int r_pin_in(void *ctx, int port, int bit, int *level) +{ + g4 *f = (g4 *)ctx; + if (port < 0 || port >= 7 || bit < 0 || bit > 15 || f->ext[port][bit] < 0) + return 0; + *level = f->ext[port][bit]; + return 1; +} + +static void r_uart_frame(void *ctx, const char *unit, int c, u32 bits, int nbits, int stop, u32 bit_cycles) +{ + g4 *f = (g4 *)ctx; + if (f->nframe < 32) { + f->frame[f->nframe].c = c; + f->frame[f->nframe].bits = bits; + f->frame[f->nframe].nbits = nbits; + f->frame[f->nframe].stop = stop; + f->frame[f->nframe].bit_cycles = bit_cycles; + snprintf(f->frame[f->nframe].unit, sizeof f->frame[f->nframe].unit, "%s", unit); + f->nframe++; + } +} + +static int g4_open(g4 *f) +{ + char why[200]; + es_status st; + int i, j; + memset(f, 0, sizeof *f); + for (i = 0; i < 7; i++) + for (j = 0; j < 16; j++) + f->ext[i][j] = -1; + esk_alloc_init(&f->a, NULL); + f->mcu = load_json(&f->a, "catalog/mcus/st/stm32g474re/mcu.json"); + f->regs = load_json(&f->a, "catalog/mcus/st/stm32g474re/registers.json"); + CHECK(f->mcu != NULL && f->regs != NULL); + esk_mach_init(&f->m, &f->a); + f->m.host.ctx = f; + f->m.host.diag = r_diag; + f->m.host.pin_cfg = r_pin_cfg; + f->m.host.pin_in = r_pin_in; + f->m.host.uart_frame = r_uart_frame; + f->m.hse_clock = 0; /* X3: a 24 MHz crystal */ + f->m.lse_hz = 32768u; /* X2 */ + st = esk_mach_build(&f->m, f->mcu, f->regs, 24000000u, why, sizeof why); + if (st != ES_OK) { + FAIL(why); + return 0; + } + CHECK_EQ(esk_bus_debug_write(&f->m.bus, 0x08000000u, 4, 0x20001000u), 0); + CHECK_EQ(esk_bus_debug_write(&f->m.bus, 0x08000004u, 4, 0x08000101u), 0); + CHECK_EQ(esk_bus_debug_write(&f->m.bus, 0x08000100u, 4, 0xbf00e7feu), 0); /* b . */ + for (i = 0; i < f->m.bus.nrg; i++) /* as an image's load leaves them: stores reach the flash interface */ + f->m.bus.rg[i].rom = f->m.bus.rg[i].kind == ESK_MEM_FLASH || f->m.bus.rg[i].kind == ESK_MEM_ROM; + esk_mach_reset(&f->m); + return 1; +} + +static void g4_close(g4 *f) +{ + esk_mach_free(&f->m); + esk_json_free(&f->a, f->mcu); + esk_json_free(&f->a, f->regs); + CHECK_EQ(f->a.live_bytes, 0); +} + +static u32 rd(g4 *f, u32 a) +{ + u32 v = 0; + CHECK_EQ(esk_bus_read(&f->m.bus, a, 4, &v), 0); + return v; +} + +static void wr(g4 *f, u32 a, u32 v) { CHECK_EQ(esk_bus_write(&f->m.bus, a, 4, v), 0); } +static void wr8(g4 *f, u32 a, u32 v) { CHECK_EQ(esk_bus_write(&f->m.bus, a, 1, v), 0); } + +/* the core runs (its program a loop in place) for `us` microseconds */ +static void run_us(g4 *f, double us) +{ + u32 hz = esk_mach_core_hz(&f->m); + u64 end = f->m.cycles + (u64)((double)(hz ? hz : 16000000u) * us / 1e6); + while (f->m.cycles < end && !f->m.reset_req) + if (!esk_mach_run(&f->m, end - f->m.cycles, 0) && f->m.asleep) + esk_mach_idle(&f->m, end - f->m.cycles); +} + +/* the microseconds until the bits at `a` are all set (or all clear), or -1 */ +static long wait_bits(g4 *f, u32 a, u32 mask, int set, long max_us) +{ + double us = 0; + while (us <= (double)max_us) { + u32 hz = esk_mach_core_hz(&f->m); + u64 from = f->m.cycles; + u32 v = rd(f, a) & mask; + if (set ? v == mask : v == 0) + return (long)(us + 0.5); + run_us(f, max_us > 100000 ? 100.0 : 0.25); + us += (double)(f->m.cycles - from) * 1e6 / (double)(hz ? hz : 16000000u); + } + return -1; +} + +/* SystemClock_Config of CubeG4's NUCLEO-G474RE examples: range 1 boost, + * HSI16 through the PLL (M /4, N 85, R /2) to 170 MHz, four wait states, + * the AHB at /2 for the switch (RM0440 7.2.7) and back to /1 */ +static void clock_170(g4 *f, int from_hse) +{ + wr(f, RCC_APB1ENR1, rd(f, RCC_APB1ENR1) | 1u << 28); /* PWREN */ + wr(f, PWR_CR5, rd(f, PWR_CR5) & ~(1u << 8)); /* R1MODE 0: boost */ + if (from_hse) { + wr(f, RCC_CR, rd(f, RCC_CR) | 1u << 16); /* HSEON */ + CHECK(wait_bits(f, RCC_CR, 1u << 17, 1, 5000) > 1000); /* HSERDY: the crystal's 2 ms */ + /* M /6, N 85, R /2: 24 / 6 x 85 / 2 = 170 MHz */ + wr(f, RCC_PLLCFGR, 3u | 5u << 4 | 85u << 8 | 1u << 24); + } else { + wr(f, RCC_PLLCFGR, 2u | 3u << 4 | 85u << 8 | 1u << 24); /* HSI16 /4 x 85 /2, PLLREN */ + } + wr(f, RCC_CR, rd(f, RCC_CR) | 1u << 24); /* PLLON */ + CHECK(wait_bits(f, RCC_CR, 1u << 25, 1, 100) >= 10); /* PLLRDY: its 15 us lock */ + wr(f, FLASH_ACR, (rd(f, FLASH_ACR) & ~0xFu) | 4u); /* LATENCY 4 */ + wr(f, RCC_CFGR, (rd(f, RCC_CFGR) & ~0xF0u) | 0x80u); /* HPRE /2 */ + wr(f, RCC_CFGR, (rd(f, RCC_CFGR) & ~3u) | 3u); /* SW PLL */ + CHECK_EQ(rd(f, RCC_CFGR) >> 2 & 3u, 3u); /* SWS */ + run_us(f, 1.0); + wr(f, RCC_CFGR, rd(f, RCC_CFGR) & ~0xF0u); /* HPRE /1 */ +} + +/* ---- the tests -------------------------------------------------------------- */ + +static void test_reset(void) +{ + g4 f; + if (!g4_open(&f)) + return; + CHECK_STR(esk_json_get_str(f.mcu, "name", ""), "STM32G474RE"); + CHECK_EQ(rd(&f, RCC_CR), 0x00000500u); /* HSION, HSIRDY */ + CHECK_EQ(rd(&f, RCC_CFGR), 0x00000005u); /* SW, SWS: HSI16 */ + CHECK_EQ(rd(&f, RCC_PLLCFGR), 0x00001000u); + CHECK_EQ(rd(&f, RCC_CSR) & 0xFE000000u, 0x0C000000u); /* BORRSTF, PINRSTF */ + CHECK_EQ(rd(&f, RCC_AHB1ENR), 0x00000100u); /* FLASHEN */ + CHECK_EQ(esk_mach_core_hz(&f.m), 16000000u); + CHECK_EQ(esk_stm32_pclk(&f.m, 1), 16000000u); + CHECK_EQ(esk_stm32_timclk(&f.m, 2), 16000000u); + /* the option bytes as from the factory, their complements checked */ + CHECK_EQ(rd(&f, FLASH_OPTR), 0xFFEFF8AAu); + CHECK_EQ(rd(&f, FLASH_SR) & (1u << 15), 0u); /* no OPTVERR */ + CHECK_EQ(rd(&f, FLASH_CR), 0xC0000000u); /* LOCK, OPTLOCK */ + CHECK_EQ(rd(&f, DBGMCU) & 0xFFFu, 0x469u); /* DEV_ID */ + /* PWR's clock is off: its registers read 0 and say why once */ + CHECK_EQ(rd(&f, PWR_CR1), 0u); + CHECK(strstr(f.codes, "mcu.clock_gated") != NULL); + wr(&f, RCC_APB1ENR1, rd(&f, RCC_APB1ENR1) | 1u << 28); + CHECK_EQ(rd(&f, PWR_CR1), 0x00000200u); /* VOS range 1 */ + CHECK_EQ(rd(&f, PWR_CR5), 0x00000100u); /* R1MODE: normal */ + CHECK_EQ(rd(&f, PWR_SR2) & (1u << 8), 1u << 8); /* REGLPS */ + g4_close(&f); +} + +static void test_170mhz(void) +{ + g4 f; + if (!g4_open(&f)) + return; + f.warnings = 0; + clock_170(&f, 0); + CHECK_EQ(esk_mach_core_hz(&f.m), 170000000u); + CHECK_EQ(esk_stm32_pclk(&f.m, 2), 170000000u); + CHECK_EQ(esk_stm32_timclk(&f.m, 1), 170000000u); + CHECK_EQ(f.warnings, 0); + /* APB1 /2: the timers run at twice it */ + wr(&f, RCC_CFGR, (rd(&f, RCC_CFGR) & ~(7u << 8)) | 4u << 8); + CHECK_EQ(esk_stm32_pclk(&f.m, 1), 85000000u); + CHECK_EQ(esk_stm32_timclk(&f.m, 1), 170000000u); + /* the PLL used as SYSCLK cannot be turned off, nor HSI16 under it */ + wr(&f, RCC_CR, rd(&f, RCC_CR) & ~(1u << 24 | 1u << 8)); + CHECK_EQ(rd(&f, RCC_CR) & (1u << 24 | 1u << 8), 1u << 24 | 1u << 8); + g4_close(&f); + /* the same from the board's 24 MHz crystal */ + if (!g4_open(&f)) + return; + f.warnings = 0; + clock_170(&f, 1); + CHECK_EQ(esk_mach_core_hz(&f.m), 170000000u); + CHECK_EQ(f.warnings, 0); + g4_close(&f); +} + +static void test_out_of_spec(void) +{ + g4 f; + if (!g4_open(&f)) + return; + /* range 1 normal (R1MODE left 1): 170 MHz is above its 150 MHz */ + wr(&f, RCC_APB1ENR1, rd(&f, RCC_APB1ENR1) | 1u << 28); + wr(&f, RCC_PLLCFGR, 2u | 3u << 4 | 85u << 8 | 1u << 24); + wr(&f, RCC_CR, rd(&f, RCC_CR) | 1u << 24); + CHECK(wait_bits(&f, RCC_CR, 1u << 25, 1, 100) >= 0); + f.codes[0] = 0; + wr(&f, FLASH_ACR, (rd(&f, FLASH_ACR) & ~0xFu) | 2u); /* too few wait states too */ + wr(&f, RCC_CFGR, (rd(&f, RCC_CFGR) & ~3u) | 3u); + CHECK(strstr(f.codes, "mcu.clock_out_of_spec") != NULL); + CHECK(strstr(f.codes, "mcu.flash_wait_states") != NULL); + g4_close(&f); + /* a VCO input below 2.66 MHz */ + if (!g4_open(&f)) + return; + wr(&f, RCC_PLLCFGR, 2u | 15u << 4 | 85u << 8 | 1u << 24); /* 16 / 16 = 1 MHz */ + f.codes[0] = 0; + wr(&f, RCC_CR, rd(&f, RCC_CR) | 1u << 24); + CHECK(strstr(f.codes, "mcu.clock_out_of_spec") != NULL); + g4_close(&f); +} + +static void test_startup_and_irq(void) +{ + g4 f; + long t; + if (!g4_open(&f)) + return; + /* HSI48 ready after its start-up, LSI after 80 us, each flag with its + * interrupt */ + wr(&f, RCC_CIER, 1u << 10 | 1u << 0); + wr(&f, RCC_CRRCR, 1u); + t = wait_bits(&f, RCC_CRRCR, 2u, 1, 50); + CHECK(t >= 2 && t <= 4); + CHECK(rd(&f, RCC_CIFR) & 1u << 10); + CHECK(rd(&f, 0xE000E200u) & 1u << 5); /* RCC's interrupt, 5, pending */ + wr(&f, RCC_CICR, 1u << 10); + CHECK_EQ(rd(&f, RCC_CIFR) & 1u << 10, 0u); + wr(&f, RCC_CSR, 1u); + t = wait_bits(&f, RCC_CSR, 2u, 1, 500); + CHECK(t >= 75 && t <= 90); + /* LSE: two seconds, written only with PWR's DBP */ + wr(&f, RCC_APB1ENR1, rd(&f, RCC_APB1ENR1) | 1u << 28); + wr(&f, RCC_BDCR, 1u); + CHECK_EQ(rd(&f, RCC_BDCR) & 1u, 0u); + wr(&f, PWR_CR1, rd(&f, PWR_CR1) | 1u << 8); + wr(&f, RCC_BDCR, 1u); + t = wait_bits(&f, RCC_BDCR, 2u, 1, 3000000); + CHECK(t >= 1990000 && t <= 2010000); + g4_close(&f); +} + +static void test_reset_flags(void) +{ + g4 f; + if (!g4_open(&f)) + return; + wr(&f, RCC_CSR, rd(&f, RCC_CSR) | 1u << 23); /* RMVF */ + CHECK_EQ(rd(&f, RCC_CSR) & 0xFE000000u, 0u); + f.m.reset_cause = ESK_RESET_SOFTWARE; + esk_mach_reset(&f.m); + CHECK_EQ(rd(&f, RCC_CSR) & 0xFE000000u, 1u << 26 | 1u << 28); /* PINRSTF, SFTRSTF */ + f.m.reset_cause = ESK_RESET_WATCHDOG; + esk_mach_reset(&f.m); + CHECK_EQ(rd(&f, RCC_CSR) & 0xFE000000u, 1u << 26 | 1u << 28 | 1u << 29); + g4_close(&f); +} + +static void test_gpio_exti(void) +{ + g4 f; + if (!g4_open(&f)) + return; + CHECK_EQ(rd(&f, GPIOA + MODER), 0u); /* its clock off */ + wr(&f, RCC_AHB2ENR, 1u | 1u << 2); /* GPIOA, GPIOC */ + CHECK_EQ(rd(&f, GPIOA + MODER), 0xABFFFFFFu); + CHECK_EQ(rd(&f, GPIOA + PUPDR), 0x64000000u); + /* PA5 (LD2) an output: BSRR sets it, BRR clears it */ + wr(&f, GPIOA + MODER, (rd(&f, GPIOA + MODER) & ~(3u << 10)) | 1u << 10); + wr(&f, GPIOA + BSRR, 1u << 5); + CHECK_EQ(f.pin[0][5].drive, 1); + CHECK_EQ(rd(&f, GPIOA + ODR) & 0x20u, 0x20u); + wr(&f, GPIOA + BRR, 1u << 5); + CHECK_EQ(f.pin[0][5].drive, 0); + CHECK_EQ(rd(&f, GPIOA + BRR), 0u); + /* PC13 (B1) an input: EXTI13 on port C, rising edge, its interrupt + * EXTI15_10 (40) */ + wr(&f, RCC_APB2ENR, 1u); /* SYSCFGEN */ + wr(&f, GPIOC + MODER, rd(&f, GPIOC + MODER) & ~(3u << 26)); + wr(&f, SYSCFG + 0x14u, 2u << 4); /* EXTICR4: EXTI13 on PC */ + wr(&f, EXTI + 0x08u, 1u << 13); /* RTSR1 */ + wr(&f, EXTI + 0x00u, rd(&f, EXTI + 0x00u) | 1u << 13); /* IMR1 */ + CHECK_EQ(rd(&f, EXTI + 0x00u) & 0x1F840000u, 0x1F840000u); /* the direct lines' */ + f.ext[2][13] = 0; + esk_stm32f4_pins_changed(&f.m); + f.ext[2][13] = 1; + esk_stm32f4_pins_changed(&f.m); + CHECK(rd(&f, EXTI + 0x14u) & 1u << 13); /* PR1 */ + CHECK(rd(&f, NVIC_ISPR1) & 1u << 8); /* 40 */ + wr(&f, EXTI + 0x14u, 1u << 13); + CHECK_EQ(rd(&f, EXTI + 0x14u) & 1u << 13, 0u); + /* the second bank: SWIER2 sets PR2 (line 38, PVM1) */ + wr(&f, EXTI + 0x20u, 1u << 6); + wr(&f, EXTI + 0x30u, 1u << 6); + CHECK(rd(&f, EXTI + 0x34u) & 1u << 6); + g4_close(&f); +} + +/* LPUART1 on PA2/PA3 (AF12) at 115200 from PCLK1, the VCP's */ +static void lpuart_setup(g4 *f, u32 pclk) +{ + wr(f, RCC_AHB2ENR, rd(f, RCC_AHB2ENR) | 1u); + wr(f, RCC_APB1ENR2, rd(f, RCC_APB1ENR2) | 1u); + wr(f, GPIOA + MODER, (rd(f, GPIOA + MODER) & ~(0xFu << 4)) | 0xAu << 4); + wr(f, GPIOA + AFRL, (rd(f, GPIOA + AFRL) & ~(0xFFu << 8)) | 0xCCu << 8); + /* UART_SetConfig: BRR = 256 x PCLK / baud, rounded */ + wr(f, LPUART1 + U_BRR, (u32)(((u64)pclk * 256u + 115200u / 2) / 115200u)); + wr(f, LPUART1 + U_CR1, 1u << 3 | 1u << 2); /* TE, RE */ + wr(f, LPUART1 + U_CR1, rd(f, LPUART1 + U_CR1) | 1u); /* UE */ +} + +static void test_lpuart(void) +{ + g4 f; + struct esk_rx_port *rx; + if (!g4_open(&f)) + return; + clock_170(&f, 0); + lpuart_setup(&f, 170000000u); + /* UART_CheckIdleState waits for TEACK and REACK */ + CHECK_EQ(rd(&f, LPUART1 + U_ISR) & (3u << 21), 3u << 21); + CHECK_EQ(f.pin[0][2].drive, 1); /* TX idles high */ + f.nframe = 0; + wr(&f, LPUART1 + U_TDR, 'H'); + CHECK_EQ(rd(&f, LPUART1 + U_ISR) & (1u << 6), 0u); /* TC clear */ + CHECK(wait_bits(&f, LPUART1 + U_ISR, 1u << 6, 1, 1000) > 80); /* the idle frame, then 'H' */ + CHECK_EQ(f.nframe, 1); + CHECK_EQ(f.frame[0].c, 'H'); + CHECK_STR(f.frame[0].unit, "LPUART1"); + CHECK_NEAR(f.frame[0].bit_cycles, 170e6 / 115200.0, 1.0); + /* receiving: RXNE, then ORE once RDR holds a frame; ICR clears it */ + rx = esk_mach_rx_find(&f.m, "LPUART1"); + CHECK(rx != NULL); + if (rx) { + CHECK(rx->room(rx->ctx)); + rx->put(rx->ctx, 'a'); + CHECK(rd(&f, LPUART1 + U_ISR) & 1u << 5); + rx->put(rx->ctx, 'b'); + CHECK(rd(&f, LPUART1 + U_ISR) & 1u << 3); + CHECK_EQ(rd(&f, LPUART1 + U_RDR), (u32)'a'); + CHECK_EQ(rd(&f, LPUART1 + U_ISR) & 1u << 5, 0u); + wr(&f, LPUART1 + U_ICR, 1u << 3); + CHECK_EQ(rd(&f, LPUART1 + U_ISR) & 1u << 3, 0u); + /* the FIFO: eight frames held, then RXFF */ + wr(&f, LPUART1 + U_CR1, rd(&f, LPUART1 + U_CR1) & ~1u); + wr(&f, LPUART1 + U_CR1, rd(&f, LPUART1 + U_CR1) | 1u << 29 | 1u); + { + int k; + for (k = 0; k < 8; k++) + rx->put(rx->ctx, '0' + k); + CHECK(rd(&f, LPUART1 + U_ISR) & 1u << 24); /* RXFF */ + CHECK_EQ(rd(&f, LPUART1 + U_ISR) & 1u << 3, 0u); + for (k = 0; k < 8; k++) + CHECK_EQ(rd(&f, LPUART1 + U_RDR), (u32)('0' + k)); + CHECK_EQ(rd(&f, LPUART1 + U_ISR) & 1u << 5, 0u); + } + } + g4_close(&f); +} + +static void test_usart_formats(void) +{ + g4 f; + if (!g4_open(&f)) + return; + /* USART1 on PC4/PC5 (AF7), 16 MHz PCLK2, 9600 baud, 7 data bits with + * even parity, MSB first, its kernel clock from HSI16 */ + wr(&f, RCC_AHB2ENR, rd(&f, RCC_AHB2ENR) | 1u << 2); + wr(&f, RCC_APB2ENR, rd(&f, RCC_APB2ENR) | 1u << 14); + wr(&f, RCC_CCIPR, 2u); /* USART1SEL: HSI16 */ + wr(&f, GPIOC + MODER, (rd(&f, GPIOC + MODER) & ~(0xFu << 8)) | 0xAu << 8); + wr(&f, GPIOC + AFRL, (rd(&f, GPIOC + AFRL) & ~(0xFFu << 16)) | 0x77u << 16); + wr(&f, USART1 + U_BRR, 16000000u / 9600u); + wr(&f, USART1 + U_CR2, 1u << 19); /* MSBFIRST */ + wr(&f, USART1 + U_CR1, 1u << 28 | 1u << 10 | 1u << 3); /* M1 (7 bits), PCE, TE */ + wr(&f, USART1 + U_CR1, rd(&f, USART1 + U_CR1) | 1u); + f.nframe = 0; + wr(&f, USART1 + U_TDR, 0x41u); /* 'A' */ + CHECK(wait_bits(&f, USART1 + U_ISR, 1u << 6, 1, 3000) > 0); + CHECK_EQ(f.nframe, 1); + CHECK_EQ(f.frame[0].nbits, 7); + /* 6 data bits and the parity bit: 0x41's six (0b000001) MSB first are + * 0b100000 on the line, even parity over them 1 */ + CHECK_EQ(f.frame[0].bits & 0x7Fu, 0x60u); + CHECK_NEAR(f.frame[0].bit_cycles, 16e6 / 9600.0, 2.0); + g4_close(&f); +} + +static void test_crc(void) +{ + g4 f; + static const u8 d16[9] = { 0x4D, 0x3C, 0x2B, 0x1A, 0xBE, 0x71, 0xC9, 0x8A, 0x5E }; + int k; + if (!g4_open(&f)) + return; + wr(&f, RCC_AHB1ENR, rd(&f, RCC_AHB1ENR) | 1u << 12); /* CRCEN */ + /* the default unit: CRC-32 of one word */ + wr(&f, CRC + 0x08u, 1u); + wr(&f, CRC + 0x00u, 0x12345678u); + CHECK_EQ(rd(&f, CRC + 0x00u), 0xDF8A8A2Bu); + /* CubeG4's CRC_UserDefinedPolynomial: 8-bit polynomial 0x9B over the + * word 0x1234, INIT 0xFF: 0xEF */ + wr(&f, CRC + 0x14u, 0x9Bu); + wr(&f, CRC + 0x08u, 2u << 3 | 1u); + wr(&f, CRC + 0x00u, 0x1234u); + CHECK_EQ(rd(&f, CRC + 0x00u), 0xEFu); + /* CRC_Data_Reversing_16bit_CRC: CCITT's 0x1021, INIT 0x5ABE, the + * input reversed by words (a byte written reversed as a byte), the + * output reversed: RBIT(0xC20A) >> 16 */ + wr(&f, CRC + 0x14u, 0x1021u); + wr(&f, CRC + 0x10u, 0x5ABEu); + wr(&f, CRC + 0x08u, 1u << 7 | 3u << 5 | 1u << 3 | 1u); + for (k = 0; k < 8; k += 4) + wr(&f, CRC + 0x00u, (u32)d16[k] << 24 | (u32)d16[k + 1] << 16 | (u32)d16[k + 2] << 8 | d16[k + 3]); + wr8(&f, CRC + 0x00u, d16[8]); + CHECK_EQ(rd(&f, CRC + 0x00u) & 0xFFFFu, 0x5043u); + g4_close(&f); +} + +static void flash_unlock(g4 *f) +{ + wr(f, FLASH_KEYR, 0x45670123u); + wr(f, FLASH_KEYR, 0xCDEF89ABu); + CHECK_EQ(rd(f, FLASH_CR) & 1u << 31, 0u); +} + +static void test_flash(void) +{ + g4 f; + u32 v = 0; + long t; + if (!g4_open(&f)) + return; + flash_unlock(&f); + /* HAL_FLASH_Program's double word at 0x08040000 (bank 2, page 0): PG, + * the first word, the second; BSY for 81.7 us */ + wr(&f, FLASH_CR, 1u); + wr(&f, 0x08040000u, 0x11223344u); + CHECK_EQ(rd(&f, FLASH_SR) & 1u << 16, 0u); + wr(&f, 0x08040004u, 0x55667788u); + CHECK(rd(&f, FLASH_SR) & 1u << 16); + t = wait_bits(&f, FLASH_SR, 1u << 16, 0, 1000); + CHECK(t >= 80 && t <= 84); /* the program runs from bank 1: bank 2's work does not stall it */ + CHECK_EQ(esk_bus_debug_read(&f.m.bus, 0x08040004u, 4, &v), 0); + CHECK_EQ(v, 0x55667788u); + /* a halfword is SIZERR, a double word not erased PROGERR */ + CHECK_EQ(esk_bus_write(&f.m.bus, 0x08040008u, 2, 0x1234u), 0); + CHECK(rd(&f, FLASH_SR) & 1u << 6); + wr(&f, FLASH_SR, 0xFFFFu); + wr(&f, 0x08040000u, 0x1u); + wr(&f, 0x08040004u, 0x1u); + CHECK(rd(&f, FLASH_SR) & 1u << 3); + wr(&f, FLASH_SR, 0xFFFFu); + /* a page erase: PER, PNB 0, BKER (bank 2), STRT; 22 ms */ + wr(&f, FLASH_CR, 1u << 1 | 1u << 11); + wr(&f, FLASH_CR, rd(&f, FLASH_CR) | 1u << 16); + t = wait_bits(&f, FLASH_SR, 1u << 16, 0, 100000); + CHECK(t >= 21000 && t <= 23000); + CHECK_EQ(esk_bus_debug_read(&f.m.bus, 0x08040000u, 4, &v), 0); + CHECK_EQ(v, 0xFFFFFFFFu); + /* the option bytes: write protection of bank 1's pages 2 to 3 */ + wr(&f, FLASH_CR, 1u << 31); /* LOCK */ + flash_unlock(&f); + wr(&f, FLASH_OPTKEYR, 0x08192A3Bu); + wr(&f, FLASH_OPTKEYR, 0x4C5D6E7Fu); + CHECK_EQ(rd(&f, FLASH_CR) & 1u << 30, 0u); + wr(&f, FLASH_WRP1AR, 2u | 3u << 16); + wr(&f, FLASH_CR, rd(&f, FLASH_CR) | 1u << 17); /* OPTSTRT */ + CHECK_EQ(esk_bus_debug_read(&f.m.bus, 0x1FFF7818u, 4, &v), 0); + CHECK_EQ(v & 0x007F007Fu, 0x00030002u); + wr(&f, FLASH_CR, rd(&f, FLASH_CR) | 1u << 27); /* OBL_LAUNCH: a reset */ + CHECK(f.m.reset_req); + f.m.reset_req = 0; + esk_mach_reset(&f.m); + CHECK(rd(&f, RCC_CSR) & 1u << 25); /* OBLRSTF */ + CHECK_EQ(rd(&f, FLASH_WRP1AR) & 0x007F007Fu, 0x00030002u); + CHECK_EQ(rd(&f, FLASH_SR) & 1u << 15, 0u); + flash_unlock(&f); + wr(&f, FLASH_CR, 1u); + wr(&f, 0x08001000u, 0u); /* page 2 */ + CHECK(rd(&f, FLASH_SR) & 1u << 4); /* WRPERR */ + g4_close(&f); +} + +static void test_iwdg_window(void) +{ + g4 f; + if (!g4_open(&f)) + return; + /* HAL_IWDG_Init with a window: start, access, PR /4, RLR 1000, WINR 500; + * refreshing above the window resets the part */ + wr(&f, IWDG + 0x00u, 0xCCCCu); + CHECK(rd(&f, RCC_CSR) & 1u << 1 || wait_bits(&f, RCC_CSR, 2u, 1, 200) >= 0); /* LSI forced on */ + wr(&f, IWDG + 0x00u, 0x5555u); + wr(&f, IWDG + 0x04u, 0u); + wr(&f, IWDG + 0x08u, 1000u); + wr(&f, IWDG + 0x10u, 500u); + CHECK(rd(&f, IWDG + 0x0Cu) & 4u); /* WVU */ + CHECK(wait_bits(&f, IWDG + 0x0Cu, 7u, 0, 1000) >= 0); + wr(&f, IWDG + 0x00u, 0xAAAAu); /* counter 1000 > 500: too early */ + CHECK(f.m.reset_req); + CHECK_EQ(f.m.reset_cause, ESK_RESET_WATCHDOG); + g4_close(&f); +} + +static void test_wwdg_prescaler(void) +{ + g4 f; + long t; + if (!g4_open(&f)) + return; + /* WDGTB at CFR[13:11]: /128 at 16 MHz, 4096 x 128 / 16 MHz = 32.77 ms a + * count; EWIF once 0x7F has counted down to 0x40 */ + wr(&f, RCC_APB1ENR1, rd(&f, RCC_APB1ENR1) | 1u << 11); + wr(&f, WWDG + 0x04u, 7u << 11 | 1u << 9 | 0x7Fu); + wr(&f, WWDG + 0x00u, 0x7Fu); + t = wait_bits(&f, WWDG + 0x08u, 1u, 1, 2500000); + CHECK(t > 0); + CHECK_NEAR((double)t, 63.0 * 4096.0 * 128.0 / 16.0, 33000.0); + g4_close(&f); +} + +static void test_stop(void) +{ + g4 f; + if (!g4_open(&f)) + return; + clock_170(&f, 0); + /* Stop 1 (LPMS 001) then a wake-up: the part runs on HSI16 again */ + wr(&f, PWR_CR1, (rd(&f, PWR_CR1) & ~7u) | 1u); + CHECK(f.m.deep_sleep != NULL); + if (f.m.deep_sleep) { + f.m.deep_sleep(&f.m); + CHECK(f.m.clocks_stopped); + CHECK_EQ(rd(&f, RCC_CR) & 1u << 24, 0u); + CHECK_EQ(esk_mach_core_hz(&f.m), 16000000u); + f.m.deep_wake(&f.m); + CHECK(!f.m.clocks_stopped); + } + /* Standby (011) with SRAM2 kept (RRS): SRAM1 lost, SBF after the reset */ + CHECK_EQ(esk_bus_debug_write(&f.m.bus, 0x20000100u, 4, 0x12345678u), 0); + CHECK_EQ(esk_bus_debug_write(&f.m.bus, 0x20014100u, 4, 0xCAFEF00Du), 0); + wr(&f, PWR_CR3, rd(&f, PWR_CR3) | 1u << 8 | 1u); /* RRS, EWUP1 (PA0) */ + wr(&f, PWR_CR1, (rd(&f, PWR_CR1) & ~7u) | 3u); + if (f.m.deep_sleep) { + u32 v = 0; + f.m.deep_sleep(&f.m); + CHECK(f.m.powered_down); + CHECK_EQ(esk_bus_debug_read(&f.m.bus, 0x20014100u, 4, &v), 0); + CHECK_EQ(v, 0xCAFEF00Du); + CHECK_EQ(esk_bus_debug_read(&f.m.bus, 0x20000100u, 4, &v), 0); + CHECK(v != 0x12345678u); + /* PA0 rises: WUF1, the part resets out of Standby */ + esk_stm32f4_pwr_pin_edge(&f.m, 0, 0, 0); + esk_stm32f4_pwr_pin_edge(&f.m, 0, 0, 1); + CHECK(f.m.reset_req); + CHECK_EQ(f.m.reset_cause, ESK_RESET_STANDBY); + f.m.reset_req = 0; + f.m.powered_down = 0; + esk_mach_reset(&f.m); + wr(&f, RCC_APB1ENR1, rd(&f, RCC_APB1ENR1) | 1u << 28); + CHECK_EQ(rd(&f, PWR_SR1) & (1u << 8 | 1u), 1u << 8 | 1u); /* SBF, WUF1 */ + wr(&f, PWR_SCR, 1u << 8 | 0x1Fu); + CHECK_EQ(rd(&f, PWR_SR1) & 0x11Fu, 0u); + } + g4_close(&f); +} + +/* halfwords from `a` (little-endian Thumb code) */ +static void code(g4 *f, u32 a, const u16 *h, int n) +{ + int k; + for (k = 0; k < n; k++) + CHECK_EQ(esk_bus_debug_write(&f->m.bus, a + 2u * (u32)k, 2, h[k]), 0); +} + +static u32 reg(g4 *f, int n) +{ + u8 b[4] = { 0, 0, 0, 0 }; + f->m.cpu->ops->reg_read(f->m.cpu, n, b); + return (u32)b[0] | (u32)b[1] << 8 | (u32)b[2] << 16 | (u32)b[3] << 24; +} + +/* ARMv7-M's ExceptionTaken clears CONTROL.SPSEL: a handler entered from a + * thread on the process stack reads it 0, and the thread reads it 1 again + * after the return (CubeG4's CORTEXM_ProcessStack checks both) */ +static void test_spsel_in_handler(void) +{ + static const u16 thread[] = { + 0xf242, 0x0000, 0xf2c2, 0x0000, /* movw r0, #0x2000; movt r0, #0x2000 */ + 0xf380, 0x8809, /* msr psp, r0 */ + 0x2002, /* movs r0, #2 */ + 0xf380, 0x8814, /* msr control, r0 */ + 0xf3bf, 0x8f6f, /* isb */ + 0xdf01, /* svc #1 */ + 0xf3ef, 0x8214, /* mrs r2, control */ + 0xe7fe, /* b . */ + }; + /* the handler stores CONTROL at 0x20003000 (its r0-r3 are the frame's again after the return) */ + static const u16 handler[] = { + 0xf243, 0x0000, 0xf2c2, 0x0000, /* movw r0, #0x3000; movt r0, #0x2000 */ + 0xf3ef, 0x8114, /* mrs r1, control */ + 0x6001, /* str r1, [r0] */ + 0x4770, /* bx lr */ + }; + u32 seen = 0; + g4 f; + if (!g4_open(&f)) + return; + code(&f, 0x08000100u, thread, (int)(sizeof thread / sizeof thread[0])); + code(&f, 0x08000200u, handler, (int)(sizeof handler / sizeof handler[0])); + CHECK_EQ(esk_bus_debug_write(&f.m.bus, 0x0800002Cu, 4, 0x08000201u), 0); /* SVCall's vector */ + esk_mach_reset(&f.m); + CHECK_EQ(esk_bus_debug_write(&f.m.bus, 0x20003000u, 4, 0xdeadbeefu), 0); + run_us(&f, 20.0); + CHECK_EQ(esk_bus_debug_read(&f.m.bus, 0x20003000u, 4, &seen), 0); + CHECK_EQ(seen, 0u); /* in the handler: SPSEL 0, the main stack */ + CHECK_EQ(reg(&f, 2) & 2u, 2u); /* back in the thread: the process stack */ + CHECK_EQ(reg(&f, 13), 0x20002000u); /* PSP as it was, the frame popped */ + g4_close(&f); +} + +TEST_MAIN_BEGIN +RUN(test_reset); +RUN(test_170mhz); +RUN(test_out_of_spec); +RUN(test_startup_and_irq); +RUN(test_reset_flags); +RUN(test_gpio_exti); +RUN(test_lpuart); +RUN(test_usart_formats); +RUN(test_crc); +RUN(test_flash); +RUN(test_iwdg_window); +RUN(test_wwdg_prescaler); +RUN(test_stop); +RUN(test_spsel_in_handler); +TEST_MAIN_END diff --git a/tools/importers/stm32g474_regs.sh b/tools/importers/stm32g474_regs.sh new file mode 100755 index 000000000..4a5f37549 --- /dev/null +++ b/tools/importers/stm32g474_regs.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2026 Junior Deogracias +# STMicroelectronics STM32G474.svd v3.0 (the STM32G4 SVD pack, Apache-2.0) to +# catalog/mcus/st/stm32g474re/registers.json, with the corrections RM0440 and +# STM32CubeG4 (stm32g474xx.h, the HAL) give; run from the repository root +SVD=${1:?usage: stm32g474_regs.sh STM32G474.svd [registers.json]} +OUT=${2:-catalog/mcus/st/stm32g474re/registers.json} +python3 tools/importers/svd2regs.py "$SVD" -o "$OUT" --id st/stm32g474re/registers \ + --strip-prefixes \ + --drop "FDCAN=its address is the FDCAN message RAM's (SRAMCAN, RM0440 2.2.2); FDCAN1 to FDCAN3 keep its registers" \ + --rename TIM15.CCMR1_Output=CCMR1 \ + --field PWR.SR2=PVMO1:12:1:r --field PWR.SR2=PVMO2:13:1:r --field PWR.SR2=PVMO3:14:1:r --field PWR.SR2=PVMO4:15:1:r \ + --field QUADSPI.CR=FTHRES:8:4 \ + --field TIM2.CNT=CNT:0:32 \ + --field DBGMCU.IDCODE=DEV_ID:0:12:r \ + --field TIM1.CCMR1=OC1M_3:16:1 --field TIM1.CCMR1=OC2M_3:24:1 \ + --field TIM1.CCMR2=OC3M_3:16:1 --field TIM1.CCMR2=OC4M_3:24:1 \ + --field TIM2.CCMR1=OC1M_3:16:1 --field TIM2.CCMR1=OC2M_3:24:1 \ + --field TIM2.CCMR2=OC3M_3:16:1 --field TIM2.CCMR2=OC4M_3:24:1 \ + --field TIM3.CCMR1=OC1M_3:16:1 --field TIM3.CCMR1=OC2M_3:24:1 \ + --field TIM3.CCMR2=OC3M_3:16:1 --field TIM3.CCMR2=OC4M_3:24:1 \ + --field TIM16.CCMR1=OC1M_3:16:1 \ + --reset USART1.ISR=0x008000C0 --reset UART4.ISR=0x008000C0 --reset LPUART1.ISR=0x008000C0 \ + --reset FLASH.OPTR=0xFFEFF8AA \ + --reset RCC.CR=0x00000500 \ + --reset DBGMCU.IDCODE=0x20016469 \ + --reset EXTI.IMR1=0x1F840000 --reset EXTI.IMR2=0x00000C3C \ + --interrupts TAMP=RTC_TAMP_CSS_LSE --interrupts PWR=PVD_PVM \ + --interrupts EXTI=EXTI0,EXTI1,EXTI2,EXTI3,EXTI4,EXTI9_5,EXTI15_10 \ + --interrupts HRTIM_TIME=HRTIM_TIME_IRQn --interrupts HRTIM_TIMF=HRTIM_TIMF_IRQn \ + --interrupts TIM15=TIM1_BRK_TIM15 --interrupts TIM16=TIM1_UP_TIM16 --interrupts TIM17=TIM1_TRG_COM \ + --interrupts ADC2=ADC1_2 \ + --interrupts DAC1=TIM6_DACUNDER --interrupts DAC3=TIM6_DACUNDER --interrupts DAC2=TIM7 --interrupts DAC4=TIM7 +# the SVD's version in the description's source, as ST's pack names it +python3 - "$OUT" <<'PY' +import json, sys +p = sys.argv[1] +d = json.load(open(p, encoding="utf-8")) +d["source"] = d["source"].replace("converted from STM32G474.svd by", "converted from STMicroelectronics STM32G474.svd v3.0 by", 1) +open(p, "w", encoding="utf-8").write(json.dumps(d, indent=1) + "\n") +PY From cbd8ec8ac926edf376eb2f3a7079caae8568ca03 Mon Sep 17 00:00:00 2001 From: Junior Deogracias Date: Thu, 12 Nov 2026 22:38:53 +0100 Subject: [PATCH 04/10] The NUCLEO-G474RE, its example and STM32CubeG4's examples - emblink/nucleo_g474re (MB1367): X3 24 MHz and X2, LD2, LD3, B1, B2, JP5's four supply positions, JP6, JP7, U11, U12, the Arduino and morpho connectors, the VCP on LPUART1, the option bytes as ST ships the board, original artwork and six fixtures. - examples/nucleo-g474re-blink-serial: 170 MHz from the crystal, LD2, B1 and the echo on LPUART1; gallery shots. - tests/vendor/stm32cubeg4: 21 of CubeG4's NUCLEO-G474RE examples built unmodified and run under scenarios, also in CI's linux-gcc job. --- .github/workflows/ci.yml | 15 + CHANGELOG.md | 51 + catalog/boards/nucleo_g474re/artwork.svg | 296 +++ catalog/boards/nucleo_g474re/board.json | 1773 +++++++++++++++++ catalog/boards/nucleo_g474re/stm32g474re.ld | 19 + catalog/boards/nucleo_g474re/tests/e5v.json | 77 + .../nucleo_g474re/tests/idd-ammeter.json | 82 + .../nucleo_g474re/tests/usb-powered.json | 107 + .../nucleo_g474re/tests/user-button.json | 70 + .../boards/nucleo_g474re/tests/vin-jp5.json | 86 + .../nucleo_g474re/tests/vin-needs-jp5.json | 62 + docs/STATUS.md | 52 + docs/gallery/README.md | 14 + .../nucleo-g474re/board-nucleo-g474re.png | Bin 0 -> 94949 bytes .../nucleo-g474re/design-nucleo-g474re.png | Bin 0 -> 190390 bytes .../nucleo-g474re/run-nucleo-g474re.png | Bin 0 -> 208169 bytes examples/nucleo-g474re-blink-serial/README.md | 36 + .../firmware/blink-serial.elf | Bin 0 -> 141420 bytes .../firmware/build.sh | 9 + .../firmware/main.c | 181 ++ .../firmware/startup.c | 54 + .../firmware/stm32g474re.ld | 19 + .../nucleo-g474re-blink-serial/project.json | 105 + .../scenarios/blink.json | 113 ++ tests/vendor/README.md | 1 + .../cortexm_modeprivilege/scenario.json | 21 + .../cortexm_processstack/scenario.json | 21 + .../cortexm_systick/scenario.json | 21 + .../crc_bytes_stream_7bit_crc/scenario.json | 21 + .../scenario.json | 21 + .../nucleo_g474re/crc_example/scenario.json | 21 + .../crc_userdefinedpolynomial/scenario.json | 21 + .../flash_eraseprogram/scenario.json | 32 + .../flash_fastprogram/scenario.json | 32 + .../nucleo_g474re/gpio_exti/scenario.json | 68 + .../nucleo_g474re/gpio_iotoggle/scenario.json | 21 + .../hal_timebase_tim/scenario.json | 21 + .../nucleo_g474re/iwdg_reset/scenario.json | 47 + .../iwdg_windowmode/scenario.json | 47 + .../stm32cubeg4/nucleo_g474re/project.json | 71 + .../nucleo_g474re/pwr_stop0/project.json | 76 + .../nucleo_g474re/pwr_stop0/scenario.json | 60 + .../rcc_clockconfig/scenario.json | 71 + .../nucleo_g474re/tim_octoggle/project.json | 91 + .../nucleo_g474re/tim_octoggle/scenario.json | 71 + .../nucleo_g474re/tim_pwmoutput/project.json | 91 + .../nucleo_g474re/tim_pwmoutput/scenario.json | 86 + .../nucleo_g474re/uart_printf/scenario.json | 37 + .../nucleo_g474re/wwdg_example/scenario.json | 47 + tests/vendor/stm32cubeg4/run.py | 172 ++ ui/apps/workbench/scripts/screenshots.mjs | 13 + 51 files changed, 4523 insertions(+) create mode 100644 catalog/boards/nucleo_g474re/artwork.svg create mode 100644 catalog/boards/nucleo_g474re/board.json create mode 100644 catalog/boards/nucleo_g474re/stm32g474re.ld create mode 100644 catalog/boards/nucleo_g474re/tests/e5v.json create mode 100644 catalog/boards/nucleo_g474re/tests/idd-ammeter.json create mode 100644 catalog/boards/nucleo_g474re/tests/usb-powered.json create mode 100644 catalog/boards/nucleo_g474re/tests/user-button.json create mode 100644 catalog/boards/nucleo_g474re/tests/vin-jp5.json create mode 100644 catalog/boards/nucleo_g474re/tests/vin-needs-jp5.json create mode 100644 docs/gallery/nucleo-g474re/board-nucleo-g474re.png create mode 100644 docs/gallery/nucleo-g474re/design-nucleo-g474re.png create mode 100644 docs/gallery/nucleo-g474re/run-nucleo-g474re.png create mode 100644 examples/nucleo-g474re-blink-serial/README.md create mode 100755 examples/nucleo-g474re-blink-serial/firmware/blink-serial.elf create mode 100755 examples/nucleo-g474re-blink-serial/firmware/build.sh create mode 100644 examples/nucleo-g474re-blink-serial/firmware/main.c create mode 100644 examples/nucleo-g474re-blink-serial/firmware/startup.c create mode 100644 examples/nucleo-g474re-blink-serial/firmware/stm32g474re.ld create mode 100644 examples/nucleo-g474re-blink-serial/project.json create mode 100644 examples/nucleo-g474re-blink-serial/scenarios/blink.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/cortexm_modeprivilege/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/cortexm_processstack/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/cortexm_systick/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/crc_bytes_stream_7bit_crc/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/crc_data_reversing_16bit_crc/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/crc_example/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/crc_userdefinedpolynomial/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/flash_eraseprogram/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/flash_fastprogram/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/gpio_exti/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/gpio_iotoggle/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/hal_timebase_tim/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/iwdg_reset/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/iwdg_windowmode/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/project.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/pwr_stop0/project.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/pwr_stop0/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/rcc_clockconfig/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/tim_octoggle/project.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/tim_octoggle/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/tim_pwmoutput/project.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/tim_pwmoutput/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/uart_printf/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/wwdg_example/scenario.json create mode 100644 tests/vendor/stm32cubeg4/run.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 673a04a5b..eb1b9cd85 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -99,6 +99,21 @@ jobs: fetch stm32-bsp-common https://github.com/STMicroelectronics/stm32-bsp-common.git 1e18c5afdf1f5971a35c8e2f88b6a21e5568ed92 python3 tests/vendor/stm32cubef4/run.py --st "$RUNNER_TEMP/st" --embsim build/${{ matrix.preset }}/bin/embsim python3 tests/vendor/stm32cubef4/run.py --st "$RUNNER_TEMP/st" --board nucleo_f446ze --embsim build/${{ matrix.preset }}/bin/embsim + - name: STM32CubeG4's examples on the NUCLEO-G474RE + if: matrix.name == 'linux-gcc' + # CubeG4 at a commit, its HAL, CMSIS device and Nucleo BSP at the submodule commits it pins + run: | + fetch() { # directory, repository, commit[, sparse paths] + git init -q "$RUNNER_TEMP/$1" + git -C "$RUNNER_TEMP/$1" fetch -q --depth 1 --filter=blob:none "$2" "$3" + if [ -n "$4" ]; then git -C "$RUNNER_TEMP/$1" sparse-checkout set $4; fi + git -C "$RUNNER_TEMP/$1" checkout -q FETCH_HEAD + } + fetch cubeg4 https://github.com/STMicroelectronics/STM32CubeG4.git 140db648b016ba49b05ca790b5b66e3477807839 "Projects/NUCLEO-G474RE Drivers/CMSIS/Include" + fetch cubeg4/Drivers/STM32G4xx_HAL_Driver https://github.com/STMicroelectronics/stm32g4xx_hal_driver.git a6001282dfacfff57e9710250f15e4333b578865 + fetch cubeg4/Drivers/CMSIS/Device/ST/STM32G4xx https://github.com/STMicroelectronics/cmsis_device_g4.git 25664ddc3a7624ae9627ae8c4c672073dc5b2539 + fetch cubeg4/Drivers/BSP/STM32G4xx_Nucleo https://github.com/STMicroelectronics/stm32g4xx-nucleo-bsp.git 33045a8df151b6a63565f2b5e1800f4358c396a1 + python3 tests/vendor/stm32cubeg4/run.py --cube "$RUNNER_TEMP/cubeg4" --embsim build/${{ matrix.preset }}/bin/embsim - name: The ST-LINK and the Debug Probe over USB/IP on the kernel's vhci-hcd, driven by stlink-tools and OpenOCD if: matrix.name == 'linux-gcc' run: | diff --git a/CHANGELOG.md b/CHANGELOG.md index b7cd535f9..eb9e4e061 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,57 @@ versions follow semantic versioning. There is no release yet. ## Unreleased +### The STM32G474RE and the NUCLEO-G474RE: a second STM32 family + +- Added `st/stm32g474re`, the STM32G474RE (Cortex-M4F at 170 MHz, 512 KiB + of dual-bank flash, 128 KiB of SRAM with the CCM SRAM), its register + description converted from ST's Apache-2.0 STM32G474.svd v3.0 by + `tools/importers/stm32g474_regs.sh` with the corrections RM0440, the CMSIS + header and the HAL give (RCC_CR's and EXTI's reset values, PWR_SR2's PVMO + bits, the timers' OCxM[3] bits ST's file leaves out, TIM2's 32-bit CNT, + the interrupts it puts on the wrong peripheral), its LQFP64 pinout, analog + inputs and alternate functions from ST's open pin data, and the DMAMUX's + request numbers. +- New models for the G4's own IP: `stm32g4-rcc` (HSI16, HSE, LSI, LSE, + HSI48 with their start-up times, the PLL's P, Q and R outputs, the kernel + clocks, the limits of the voltage ranges and flash wait states), + `stm32g4-pwr` (the voltage ranges and boost, the PVD, Stop 0 and 1, + Standby with SRAM2 and the pull configuration, Shutdown, the wake-up + pins), `stm32g4-flash` (double-word and fast programming, page and bank + erases with read-while-write between the banks, the option bytes with + their complements, OBL_LAUNCH, BOOT0 on PB8 or nBOOT0) and + `stm32-usart-v2` (the U(S)ARTs and LPUART of the ISR/ICR layout: FIFOs, + 7/8/9-bit frames, MSBFIRST, DATAINV, SWAP, DE, character match, receiver + timeout, wake-up from Stop). +- Shared models taught the G4's registers: GPIO's BRR, SYSCFG's G4 remaps + and CCM SRAM erase, EXTI's two banks of lines, the programmable CRC + (polynomial, size, input and output reversal), the IWDG's window and the + option bytes' hardware start and freeze, the WWDG's 3-bit prescaler, + DBGMCU's G4 names, the timers' TISEL clock inputs and freeze bits found + by name, a pin's analog entry listing several ADC groups. +- Added `emblink/nucleo_g474re` (MB1367): the 24 MHz HSE crystal X3 and + the LSE crystal X2, LD2 on PA5, B1 on PC13, B2, LD3, JP5's four supply + positions, JP6 (IDD), JP7, U11 and U12, the Arduino and morpho + connectors, the VCP on LPUART1, its option bytes as ST ships the board + (nSWBOOT0 0), original artwork, and six fixtures (USB, VIN, E5V, VIN + without JP5, the IDD ammeter, B1). +- A board can give its MCU's memory as it ships (`mcu.memory`: the + NUCLEO-G474RE's option bytes), and an MCU model can choose the boot + (`boot_pin`, `boot_system`: the G4's BOOT0 on PB8). +- `tests/vendor/stm32cubeg4/run.py` builds STM32CubeG4's examples for the + NUCLEO-G474RE unmodified; 21 run under scenarios (GPIO, EXTI, the HAL's + time base on TIM6, RCC's PLL moved between HSI16 and HSE, UART_Printf on + LPUART1, four CRC examples, the Cortex-M4's privilege modes, process + stack and SysTick, FLASH erase/program and fast program with their timing, the IWDG + with and without a window, the WWDG, Stop 0, TIM1's PWM and output + compare toggle), in CI's linux-gcc job too. +- Fixed: exception entry left CONTROL.SPSEL set when the thread ran on the + process stack, so a handler read CONTROL[1] as 1 (ARMv7-M's ExceptionTaken + clears it); CubeG4's CORTEXM_ProcessStack found it. +- `svd2regs.py`: `--strip-prefixes` (TIM2_CR1 in TIM2 named CR1), + `--rename`, and `--drop` leaving the peripherals derived from the dropped + one its registers. + ### DC motors and their driver: the first of the robot's parts (M7) - Added the analog primitive `dc_motor` (`core/analog/motor.c`, SPEC-004): a diff --git a/catalog/boards/nucleo_g474re/artwork.svg b/catalog/boards/nucleo_g474re/artwork.svg new file mode 100644 index 000000000..7e9612b8d --- /dev/null +++ b/catalog/boards/nucleo_g474re/artwork.svg @@ -0,0 +1,296 @@ + + + + + + + + + +USB STLINK-V3E + + +STM32F723IEK6 +LD1 COM +JP5 5V_SEL + + + +STLK + + + +VIN + + + +E5V + + + +CHGR +IDD + + +USER +JP7 BOOT0 +RESET +LD2 +LD3 5V_PWR + +STM32G474RET6 +X2 +X3 24MHz + +CN10 pin 1: CN10_1 + +CN10 pin 2: CN10_2 + +CN10 pin 3: CN10_3 + +CN10 pin 4: CN10_4 + +CN10 pin 5: CN10_5 + +CN10 pin 6: CN10_6 + +CN10 pin 7: CN10_7 + +CN10 pin 8: CN10_8 + +CN10 pin 9: CN10_9 + + + +CN10 pin 11: CN10_11 + +CN10 pin 12: CN10_12 + +CN10 pin 13: CN10_13 + +CN10 pin 14: CN10_14 + +CN10 pin 15: CN10_15 + +CN10 pin 16: CN10_16 + +CN10 pin 17: CN10_17 + +CN10 pin 18: CN10_18 + +CN10 pin 19: CN10_19 + +CN10 pin 20: CN10_20 + +CN10 pin 21: CN10_21 + +CN10 pin 22: CN10_22 + +CN10 pin 23: CN10_23 + +CN10 pin 24: CN10_24 + +CN10 pin 25: CN10_25 + +CN10 pin 26: CN10_26 + +CN10 pin 27: CN10_27 + +CN10 pin 28: CN10_28 + +CN10 pin 29: CN10_29 + +CN10 pin 30: CN10_30 + +CN10 pin 31: CN10_31 + +CN10 pin 32: CN10_32 + +CN10 pin 33: CN10_33 + +CN10 pin 34: CN10_34 + +CN10 pin 35: CN10_35 + + + +CN10 pin 37: CN10_37 + + + +CN5 pin 1: D8 +D8 + +CN5 pin 2: D9 +D9 + +CN5 pin 3: D10 +D10 + +CN5 pin 4: D11 +D11 + +CN5 pin 5: D12 +D12 + +CN5 pin 6: D13 +D13 + +CN5 pin 7: GND_D +GND_D + +CN5 pin 8: AREF +AREF + +CN5 pin 9: D14 +D14 + +CN5 pin 10: D15 +D15 + + + +CN6 pin 2: IOREF +IOREF + +CN6 pin 3: RESET +RESET + +CN6 pin 4: 3V3 +3V3 + +CN6 pin 5: 5V +5V + +CN6 pin 6: GND +GND + +CN6 pin 7: GND_2 +GND_2 + +CN6 pin 8: VIN +VIN + +CN7 pin 1: CN7_1 + +CN7 pin 2: CN7_2 + +CN7 pin 3: CN7_3 + +CN7 pin 4: CN7_4 + +CN7 pin 5: CN7_5 + +CN7 pin 6: E5V + +CN7 pin 7: CN7_7 + +CN7 pin 8: CN7_8 + + + + + + + +CN7 pin 12: CN7_12 + +CN7 pin 13: CN7_13 + +CN7 pin 14: CN7_14 + +CN7 pin 15: CN7_15 + +CN7 pin 16: CN7_16 + +CN7 pin 17: CN7_17 + +CN7 pin 18: CN7_18 + +CN7 pin 19: CN7_19 + +CN7 pin 20: CN7_20 + +CN7 pin 21: CN7_21 + +CN7 pin 22: CN7_22 + +CN7 pin 23: CN7_23 + +CN7 pin 24: CN7_24 + +CN7 pin 25: CN7_25 + + + +CN7 pin 27: CN7_27 + +CN7 pin 28: CN7_28 + + + +CN7 pin 30: CN7_30 + +CN7 pin 31: CN7_31 + +CN7 pin 32: CN7_32 + +CN7 pin 33: CN7_33 + +CN7 pin 34: CN7_34 + +CN7 pin 35: CN7_35 + +CN7 pin 36: CN7_36 + +CN7 pin 37: CN7_37 + +CN7 pin 38: CN7_38 + +CN8 pin 1: A0 +A0 + +CN8 pin 2: A1 +A1 + +CN8 pin 3: A2 +A2 + +CN8 pin 4: A3 +A3 + +CN8 pin 5: A4 +A4 + +CN8 pin 6: A5 +A5 + +CN9 pin 1: D0 +D0 + +CN9 pin 2: D1 +D1 + +CN9 pin 3: D2 +D2 + +CN9 pin 4: D3 +D3 + +CN9 pin 5: D4 +D4 + +CN9 pin 6: D5 +D5 + +CN9 pin 7: D6 +D6 + +CN9 pin 8: D7 +D7 +CN7 +CN10 +CN6 +CN5 +NUCLEO-G474RE + diff --git a/catalog/boards/nucleo_g474re/board.json b/catalog/boards/nucleo_g474re/board.json new file mode 100644 index 000000000..0a1cd776a --- /dev/null +++ b/catalog/boards/nucleo_g474re/board.json @@ -0,0 +1,1773 @@ +{ + "schema_version": 1, + "kind": "board", + "id": "emblink/nucleo_g474re", + "version": "1.0.0", + "name": "NUCLEO-G474RE", + "description": "ST's NUCLEO-G474RE (MB1367): an STM32G474RET6 with the 24 MHz HSE crystal X3 and the 32.768 kHz LSE crystal X2, the green user LED LD2 on PA5, the blue USER button on PC13, the black RESET button, the green power LED LD3, JP5 choosing the STLINK-V3E's USB, VIN, E5V or a USB charger, JP6 (IDD) to measure the MCU's current, the Arduino Uno V3 headers and the two ST morpho headers. The STLINK-V3E's virtual COM port is the session's serial console on LPUART1 (PA2/PA3), and a serial port on the host (embsim serve --serial).", + "keywords": [ + "nucleo", + "nucleo-64", + "stm32g4", + "stm32g474", + "stm32g474re", + "stm32", + "cortex-m4", + "stlink-v3e" + ], + "revision": "MB1367", + "mcu": { + "ref": "st/stm32g474re", + "package": "lqfp64", + "instance": "U1", + "memory": [ + { + "base": "0x1FFF7800", + "bytes": "aaf8effb55071004", + "doc": "USER and RDP as ST programs them on the NUCLEO-G474RE: 0xFBEFF8AA, nSWBOOT0 0 and nBOOT0 1, so the part boots its flash whatever PB8 (D15) is, as ST says the board ships (ST community, 2019)" + } + ] + }, + "oscillators": { + "hse": { + "hz": 24000000, + "source": "external_crystal", + "component": "X3" + }, + "lse": { + "hz": 32768, + "source": "external_crystal", + "component": "X2" + } + }, + "components": [ + { + "id": "U11", + "component": "emblink/regulator", + "params": { + "part": "LD1117S50" + }, + "doc": "U11 LD1117S50TR: 5 V from VIN (7 to 12 V) to JP5's VIN position" + }, + { + "id": "JP5_STLK", + "component": "emblink/toggle_switch", + "params": { + "initially_closed": true + }, + "doc": "JP5 (5V_SEL) on pins 1-2, STLK: the board runs from the STLINK-V3E's USB (the factory position)" + }, + { + "id": "JP5_VIN", + "component": "emblink/toggle_switch", + "doc": "JP5 on pins 3-4, VIN: +5V from U11" + }, + { + "id": "JP5_E5V", + "component": "emblink/toggle_switch", + "doc": "JP5 on pins 5-6, E5V: +5V from an external 5 V supply on CN7 pin 6" + }, + { + "id": "JP5_CHGR", + "component": "emblink/toggle_switch", + "doc": "JP5 on pins 7-8, CHGR: +5V straight from the STLINK-V3E's USB connector, for a USB charger (no enumeration, no current limit)" + }, + { + "id": "U12", + "component": "emblink/regulator", + "params": { + "part": "LD39050PU33R" + }, + "doc": "U12 LD39050PU33R: +3.3V from +5V (500 mA)" + }, + { + "id": "JP6", + "component": "emblink/toggle_switch", + "params": { + "initially_closed": true + }, + "doc": "JP6 (IDD, on from the factory): +3.3V to the STM32's VDD; remove it and put an ammeter across IDD_3V3 and IDD_VDD" + }, + { + "id": "LD3", + "component": "emblink/led", + "params": { + "color": "green" + }, + "doc": "LD3 (5V_PWR, green): +5V is present" + }, + { + "id": "R_LD3", + "component": "emblink/resistor", + "params": { + "resistance": "1k" + }, + "doc": "LD3's series resistor (its value assumed: MB1367's schematic not at hand)" + }, + { + "id": "L1", + "component": "emblink/resistor", + "params": { + "resistance": 0.001 + }, + "doc": "VDDA and VREF+ fed from VDD (the ferrite bead between them taken as a short)" + }, + { + "id": "LD2", + "component": "emblink/led", + "params": { + "color": "green" + }, + "doc": "LD2 (USER, green): PA5 (Arduino D13) high lights it" + }, + { + "id": "R_LD2", + "component": "emblink/resistor", + "params": { + "resistance": 510 + }, + "doc": "LD2's series resistor (its value assumed)" + }, + { + "id": "B1", + "component": "emblink/push_button", + "doc": "B1 USER (blue): pulls PC13 to ground through R_B1 while pressed, as CubeG4's GPIO_EXTI example and Zephyr's board take it (a falling edge on a press)" + }, + { + "id": "R_PC13", + "component": "emblink/resistor", + "params": { + "resistance": "4.7k" + }, + "doc": "PC13's pull-up to VDD: high while B1 is released (value assumed)" + }, + { + "id": "R_B1", + "component": "emblink/resistor", + "params": { + "resistance": 100 + }, + "doc": "B1's resistor to ground (value assumed)" + }, + { + "id": "C_PC13", + "component": "emblink/capacitor", + "params": { + "capacitance": "100n" + }, + "doc": "PC13's filter capacitor (value assumed)" + }, + { + "id": "B2", + "component": "emblink/push_button", + "doc": "B2 RESET (black): pulls NRST low" + }, + { + "id": "C_NRST", + "component": "emblink/capacitor", + "params": { + "capacitance": "100n" + }, + "doc": "NRST's capacitor: with the STM32's internal pull-up, it holds the part in reset at power-on" + }, + { + "id": "JP7", + "component": "emblink/toggle_switch", + "doc": "JP7 (not fitted): the BOOT0/PB8 pull-down, for when the option bytes' nSWBOOT0 makes PB8 the boot pin" + }, + { + "id": "R_JP7", + "component": "emblink/resistor", + "params": { + "resistance": "10k" + }, + "doc": "JP7's pull-down (value assumed)" + }, + { + "id": "X2", + "component": "emblink/crystal", + "params": { + "hz": 32768, + "c0": "1.5p", + "cm": "3f", + "lm": "7.8k", + "rm": "50k" + }, + "doc": "X2, the 32.768 kHz LSE crystal on PC14/PC15 (its part's motional values assumed)" + }, + { + "id": "X3", + "component": "emblink/crystal", + "params": { + "hz": "24meg" + }, + "doc": "X3, the 24 MHz HSE crystal on PF0/PF1 (OSC_IN/OSC_OUT)" + }, + { + "id": "CN6", + "component": "emblink/header", + "params": { + "pins": 8 + }, + "doc": "Arduino power: NC IOREF RESET +3.3V +5V GND GND VIN" + }, + { + "id": "CN8", + "component": "emblink/header", + "params": { + "pins": 6 + }, + "doc": "Arduino analog: A0..A5" + }, + { + "id": "CN5", + "component": "emblink/header", + "params": { + "pins": 10 + }, + "doc": "Arduino digital: D8..D13 GND AREF D14 D15" + }, + { + "id": "CN9", + "component": "emblink/header", + "params": { + "pins": 8 + }, + "doc": "Arduino digital: D0..D7" + }, + { + "id": "CN7", + "component": "emblink/header", + "params": { + "pins": 38 + }, + "doc": "ST morpho, left (2 x 19)" + }, + { + "id": "CN10", + "component": "emblink/header", + "params": { + "pins": 38 + }, + "doc": "ST morpho, right (2 x 19)" + }, + { + "id": "CN1", + "component": "emblink/header", + "params": { + "pins": 5 + }, + "doc": "CN1, the STLINK-V3E's micro-USB: 1 VBUS (U5V), 2 D-, 3 D+, 4 ID, 5 GND" + } + ], + "nets": { + "VIN": [ + "U11.IN", + "CN6.8", + "CN7.24" + ], + "5V_VIN": [ + "U11.OUT", + "JP5_VIN.1" + ], + "U5V": [ + "CN1.1", + "JP5_STLK.1", + "JP5_CHGR.1", + "CN10.8" + ], + "E5V": [ + "JP5_E5V.1", + "CN7.6" + ], + "5V": [ + "JP5_STLK.2", + "JP5_VIN.2", + "JP5_E5V.2", + "JP5_CHGR.2", + "U12.IN", + "R_LD3.1", + "CN6.5", + "CN7.18" + ], + "LD3_A": [ + "R_LD3.2", + "LD3.A" + ], + "3V3": [ + "U12.OUT", + "JP6.1", + "CN6.2", + "CN6.4", + "CN7.12", + "CN7.16" + ], + "VDD": [ + "JP6.2", + "U1.VDD", + "U1.VBAT", + "R_PC13.1", + "CN7.5", + "CN7.33", + "L1.1" + ], + "AVDD": [ + "U1.VDDA", + "U1.VREFP", + "CN5.8", + "CN10.7", + "L1.2" + ], + "GND": [ + "U11.GND", + "U12.GND", + "LD3.K", + "LD2.K", + "B2.2", + "C_NRST.2", + "C_PC13.2", + "R_B1.2", + "R_JP7.2", + "U1.VSS", + "U1.VSSA", + "CN5.7", + "CN6.6", + "CN6.7", + "CN7.8", + "CN7.19", + "CN7.20", + "CN7.22", + "CN10.9", + "CN10.20", + "CN10.32", + "CN1.5" + ], + "LD2_A": [ + "R_LD2.2", + "LD2.A" + ], + "B1_N": [ + "B1.2", + "R_B1.1" + ], + "NRST": [ + "U1.NRST", + "B2.1", + "C_NRST.1", + "CN6.3", + "CN7.14" + ], + "JP7_N": [ + "JP7.2", + "R_JP7.1" + ], + "PC14": [ + "U1.PC14", + "X2.1" + ], + "PC15": [ + "U1.PC15", + "X2.2" + ], + "PF0": [ + "U1.PF0", + "X3.1" + ], + "PF1": [ + "U1.PF1", + "X3.2" + ], + "USB_DM": [ + "CN1.2" + ], + "USB_DP": [ + "CN1.3" + ], + "PC5": [ + "U1.PC5", + "CN9.1", + "CN10.6" + ], + "PC4": [ + "U1.PC4", + "CN9.2", + "CN10.34" + ], + "PA10": [ + "U1.PA10", + "CN9.3", + "CN10.33" + ], + "PB3": [ + "U1.PB3", + "CN9.4", + "CN10.31" + ], + "PB5": [ + "U1.PB5", + "CN9.5", + "CN10.29" + ], + "PB4": [ + "U1.PB4", + "CN9.6", + "CN10.27" + ], + "PB10": [ + "U1.PB10", + "CN9.7", + "CN10.25" + ], + "PA8": [ + "U1.PA8", + "CN9.8", + "CN10.23" + ], + "PA9": [ + "U1.PA9", + "CN5.1", + "CN10.21" + ], + "PC7": [ + "U1.PC7", + "CN5.2", + "CN10.19" + ], + "PB6": [ + "U1.PB6", + "CN5.3", + "CN10.17" + ], + "PA7": [ + "U1.PA7", + "CN5.4", + "CN10.15" + ], + "PA6": [ + "U1.PA6", + "CN5.5", + "CN10.13" + ], + "PA5": [ + "U1.PA5", + "CN5.6", + "CN10.11", + "R_LD2.1" + ], + "PB9": [ + "U1.PB9", + "CN5.9", + "CN10.5" + ], + "PB8": [ + "U1.PB8", + "CN5.10", + "CN7.7", + "CN10.3", + "JP7.1" + ], + "PA0": [ + "U1.PA0", + "CN8.1", + "CN7.28" + ], + "PA1": [ + "U1.PA1", + "CN8.2", + "CN7.30" + ], + "PA4": [ + "U1.PA4", + "CN8.3", + "CN7.32" + ], + "PB0": [ + "U1.PB0", + "CN8.4", + "CN7.34" + ], + "PC1": [ + "U1.PC1", + "CN8.5", + "CN7.36" + ], + "PC0": [ + "U1.PC0", + "CN8.6", + "CN7.38" + ], + "PC10": [ + "U1.PC10", + "CN7.1" + ], + "PC11": [ + "U1.PC11", + "CN7.2" + ], + "PC12": [ + "U1.PC12", + "CN7.3" + ], + "PD2": [ + "U1.PD2", + "CN7.4" + ], + "PA13": [ + "U1.PA13", + "CN7.13" + ], + "PA14": [ + "U1.PA14", + "CN7.15" + ], + "PA15": [ + "U1.PA15", + "CN7.17" + ], + "PB7": [ + "U1.PB7", + "CN7.21" + ], + "PC13": [ + "U1.PC13", + "CN7.23", + "R_PC13.2", + "C_PC13.1", + "B1.1" + ], + "PC2": [ + "U1.PC2", + "CN7.35" + ], + "PC3": [ + "U1.PC3", + "CN7.37" + ], + "PC9": [ + "U1.PC9", + "CN10.1" + ], + "PC8": [ + "U1.PC8", + "CN10.2" + ], + "PC6": [ + "U1.PC6", + "CN10.4" + ], + "PA12": [ + "U1.PA12", + "CN10.12" + ], + "PA11": [ + "U1.PA11", + "CN10.14" + ], + "PB12": [ + "U1.PB12", + "CN10.16" + ], + "PB11": [ + "U1.PB11", + "CN10.18" + ], + "PB2": [ + "U1.PB2", + "CN10.22" + ], + "PB1": [ + "U1.PB1", + "CN10.24" + ], + "PB15": [ + "U1.PB15", + "CN10.26" + ], + "PB14": [ + "U1.PB14", + "CN10.28" + ], + "PB13": [ + "U1.PB13", + "CN10.30" + ], + "PA2": [ + "U1.PA2", + "CN10.35" + ], + "PA3": [ + "U1.PA3", + "CN10.37" + ], + "CN7_25_NC": [ + "CN7.25" + ], + "CN7_27_NC": [ + "CN7.27" + ] + }, + "ports": { + "D0": { + "net": "PC5", + "connector": "CN9", + "pin": 1, + "doc": "PC5, USART1_RX" + }, + "D1": { + "net": "PC4", + "connector": "CN9", + "pin": 2, + "doc": "PC4, USART1_TX" + }, + "D2": { + "net": "PA10", + "connector": "CN9", + "pin": 3 + }, + "D3": { + "net": "PB3", + "connector": "CN9", + "pin": 4 + }, + "D4": { + "net": "PB5", + "connector": "CN9", + "pin": 5 + }, + "D5": { + "net": "PB4", + "connector": "CN9", + "pin": 6 + }, + "D6": { + "net": "PB10", + "connector": "CN9", + "pin": 7 + }, + "D7": { + "net": "PA8", + "connector": "CN9", + "pin": 8 + }, + "D8": { + "net": "PA9", + "connector": "CN5", + "pin": 1 + }, + "D9": { + "net": "PC7", + "connector": "CN5", + "pin": 2 + }, + "D10": { + "net": "PB6", + "connector": "CN5", + "pin": 3 + }, + "D11": { + "net": "PA7", + "connector": "CN5", + "pin": 4 + }, + "D12": { + "net": "PA6", + "connector": "CN5", + "pin": 5 + }, + "D13": { + "net": "PA5", + "connector": "CN5", + "pin": 6, + "doc": "PA5, LD2, SPI1_SCK" + }, + "D14": { + "net": "PB9", + "connector": "CN5", + "pin": 9, + "doc": "PB9, I2C1_SDA" + }, + "D15": { + "net": "PB8", + "connector": "CN5", + "pin": 10, + "doc": "PB8, I2C1_SCL; also BOOT0 when the option bytes' nSWBOOT0 is 1 (the board ships with it 0)" + }, + "GND_D": { + "net": "GND", + "connector": "CN5", + "pin": 7 + }, + "AREF": { + "net": "AVDD", + "connector": "CN5", + "pin": 8, + "doc": "AVDD (VDDA and VREF+)" + }, + "IOREF": { + "net": "3V3", + "connector": "CN6", + "pin": 2 + }, + "RESET": { + "net": "NRST", + "connector": "CN6", + "pin": 3, + "doc": "NRST" + }, + "3V3": { + "net": "3V3", + "connector": "CN6", + "pin": 4, + "doc": "+3.3V from U12 (LD39050PU33R)" + }, + "5V": { + "net": "5V", + "connector": "CN6", + "pin": 5 + }, + "GND": { + "net": "GND", + "connector": "CN6", + "pin": 6 + }, + "GND_2": { + "net": "GND", + "connector": "CN6", + "pin": 7 + }, + "VIN": { + "net": "VIN", + "connector": "CN6", + "pin": 8, + "doc": "7 to 12 V into U11 (LD1117S50); JP5 must be on VIN (pins 3-4)" + }, + "A0": { + "net": "PA0", + "connector": "CN8", + "pin": 1 + }, + "A1": { + "net": "PA1", + "connector": "CN8", + "pin": 2 + }, + "A2": { + "net": "PA4", + "connector": "CN8", + "pin": 3 + }, + "A3": { + "net": "PB0", + "connector": "CN8", + "pin": 4 + }, + "A4": { + "net": "PC1", + "connector": "CN8", + "pin": 5 + }, + "A5": { + "net": "PC0", + "connector": "CN8", + "pin": 6 + }, + "CN7_1": { + "net": "PC10", + "connector": "CN7", + "pin": 1 + }, + "CN7_2": { + "net": "PC11", + "connector": "CN7", + "pin": 2 + }, + "CN7_3": { + "net": "PC12", + "connector": "CN7", + "pin": 3 + }, + "CN7_4": { + "net": "PD2", + "connector": "CN7", + "pin": 4 + }, + "CN7_5": { + "net": "VDD", + "connector": "CN7", + "pin": 5 + }, + "E5V": { + "net": "E5V", + "connector": "CN7", + "pin": 6, + "doc": "E5V: an external 5 V supply in, with JP5 on pins 5-6" + }, + "CN7_7": { + "net": "PB8", + "connector": "CN7", + "pin": 7, + "doc": "PB8 (BOOT0 when nSWBOOT0 is 1): JP7 pulls it down once fitted" + }, + "CN7_8": { + "net": "GND", + "connector": "CN7", + "pin": 8 + }, + "CN7_12": { + "net": "3V3", + "connector": "CN7", + "pin": 12 + }, + "CN7_13": { + "net": "PA13", + "connector": "CN7", + "pin": 13 + }, + "CN7_14": { + "net": "NRST", + "connector": "CN7", + "pin": 14 + }, + "CN7_15": { + "net": "PA14", + "connector": "CN7", + "pin": 15 + }, + "CN7_16": { + "net": "3V3", + "connector": "CN7", + "pin": 16 + }, + "CN7_17": { + "net": "PA15", + "connector": "CN7", + "pin": 17 + }, + "CN7_18": { + "net": "5V", + "connector": "CN7", + "pin": 18 + }, + "CN7_19": { + "net": "GND", + "connector": "CN7", + "pin": 19 + }, + "CN7_20": { + "net": "GND", + "connector": "CN7", + "pin": 20 + }, + "CN7_21": { + "net": "PB7", + "connector": "CN7", + "pin": 21 + }, + "CN7_22": { + "net": "GND", + "connector": "CN7", + "pin": 22 + }, + "CN7_23": { + "net": "PC13", + "connector": "CN7", + "pin": 23 + }, + "CN7_24": { + "net": "VIN", + "connector": "CN7", + "pin": 24 + }, + "CN7_25": { + "net": "CN7_25_NC", + "connector": "CN7", + "pin": 25, + "doc": "Not connected: PC14 is X2's (its bridge off)" + }, + "CN7_27": { + "net": "CN7_27_NC", + "connector": "CN7", + "pin": 27, + "doc": "Not connected: PC15 is X2's (its bridge off)" + }, + "CN7_28": { + "net": "PA0", + "connector": "CN7", + "pin": 28 + }, + "CN7_30": { + "net": "PA1", + "connector": "CN7", + "pin": 30 + }, + "CN7_32": { + "net": "PA4", + "connector": "CN7", + "pin": 32 + }, + "CN7_33": { + "net": "VDD", + "connector": "CN7", + "pin": 33 + }, + "CN7_34": { + "net": "PB0", + "connector": "CN7", + "pin": 34 + }, + "CN7_35": { + "net": "PC2", + "connector": "CN7", + "pin": 35 + }, + "CN7_36": { + "net": "PC1", + "connector": "CN7", + "pin": 36 + }, + "CN7_37": { + "net": "PC3", + "connector": "CN7", + "pin": 37 + }, + "CN7_38": { + "net": "PC0", + "connector": "CN7", + "pin": 38 + }, + "CN10_1": { + "net": "PC9", + "connector": "CN10", + "pin": 1 + }, + "CN10_2": { + "net": "PC8", + "connector": "CN10", + "pin": 2 + }, + "CN10_3": { + "net": "PB8", + "connector": "CN10", + "pin": 3 + }, + "CN10_4": { + "net": "PC6", + "connector": "CN10", + "pin": 4 + }, + "CN10_5": { + "net": "PB9", + "connector": "CN10", + "pin": 5 + }, + "CN10_6": { + "net": "PC5", + "connector": "CN10", + "pin": 6 + }, + "CN10_7": { + "net": "AVDD", + "connector": "CN10", + "pin": 7 + }, + "CN10_8": { + "net": "U5V", + "connector": "CN10", + "pin": 8 + }, + "CN10_9": { + "net": "GND", + "connector": "CN10", + "pin": 9 + }, + "CN10_11": { + "net": "PA5", + "connector": "CN10", + "pin": 11 + }, + "CN10_12": { + "net": "PA12", + "connector": "CN10", + "pin": 12 + }, + "CN10_13": { + "net": "PA6", + "connector": "CN10", + "pin": 13 + }, + "CN10_14": { + "net": "PA11", + "connector": "CN10", + "pin": 14 + }, + "CN10_15": { + "net": "PA7", + "connector": "CN10", + "pin": 15 + }, + "CN10_16": { + "net": "PB12", + "connector": "CN10", + "pin": 16 + }, + "CN10_17": { + "net": "PB6", + "connector": "CN10", + "pin": 17 + }, + "CN10_18": { + "net": "PB11", + "connector": "CN10", + "pin": 18 + }, + "CN10_19": { + "net": "PC7", + "connector": "CN10", + "pin": 19 + }, + "CN10_20": { + "net": "GND", + "connector": "CN10", + "pin": 20 + }, + "CN10_21": { + "net": "PA9", + "connector": "CN10", + "pin": 21 + }, + "CN10_22": { + "net": "PB2", + "connector": "CN10", + "pin": 22 + }, + "CN10_23": { + "net": "PA8", + "connector": "CN10", + "pin": 23 + }, + "CN10_24": { + "net": "PB1", + "connector": "CN10", + "pin": 24 + }, + "CN10_25": { + "net": "PB10", + "connector": "CN10", + "pin": 25 + }, + "CN10_26": { + "net": "PB15", + "connector": "CN10", + "pin": 26 + }, + "CN10_27": { + "net": "PB4", + "connector": "CN10", + "pin": 27 + }, + "CN10_28": { + "net": "PB14", + "connector": "CN10", + "pin": 28 + }, + "CN10_29": { + "net": "PB5", + "connector": "CN10", + "pin": 29 + }, + "CN10_30": { + "net": "PB13", + "connector": "CN10", + "pin": 30 + }, + "CN10_31": { + "net": "PB3", + "connector": "CN10", + "pin": 31 + }, + "CN10_32": { + "net": "GND", + "connector": "CN10", + "pin": 32 + }, + "CN10_33": { + "net": "PA10", + "connector": "CN10", + "pin": 33 + }, + "CN10_34": { + "net": "PC4", + "connector": "CN10", + "pin": 34 + }, + "CN10_35": { + "net": "PA2", + "connector": "CN10", + "pin": 35, + "doc": "PA2, LPUART1_TX: the STLINK-V3E's virtual COM port" + }, + "CN10_37": { + "net": "PA3", + "connector": "CN10", + "pin": 37, + "doc": "PA3, LPUART1_RX: the STLINK-V3E's virtual COM port" + }, + "U5V": { + "net": "U5V", + "doc": "The STLINK-V3E's USB 5 V (CN1, micro-B) from the host" + }, + "IDD_3V3": { + "net": "3V3", + "doc": "JP6 pin 1, the regulator's side: an ammeter's + lead" + }, + "IDD_VDD": { + "net": "VDD", + "doc": "JP6 pin 2, the STM32's side: an ammeter's - lead" + }, + "USB_VBUS": { + "net": "U5V", + "connector": "CN1", + "pin": 1, + "doc": "The STLINK-V3E's micro-USB VBUS: a computer's 5 V powers the board through JP5" + }, + "USB_DM": { + "net": "USB_DM", + "connector": "CN1", + "pin": 2, + "doc": "The STLINK-V3E's USB D- (its USB device not modelled)" + }, + "USB_DP": { + "net": "USB_DP", + "connector": "CN1", + "pin": 3, + "doc": "The STLINK-V3E's USB D+ (its USB device not modelled)" + } + }, + "leds": [ + { + "name": "user", + "component": "LD2", + "gpio": "PA5", + "active": "high", + "color": "green" + }, + { + "name": "power", + "component": "LD3", + "color": "green" + } + ], + "buttons": [ + { + "name": "user", + "component": "B1", + "gpio": "PC13", + "active": "low" + }, + { + "name": "reset", + "component": "B2", + "signal": "NRST", + "active": "low" + } + ], + "console": { + "peripheral": "LPUART1", + "tx": "PA2", + "rx": "PA3", + "baud": 115200, + "bridge": { + "part": "STM32F723IEK6 (STLINK-V3E)", + "usb": { + "vid": "0x0483", + "pid": "0x374E", + "product": "STLINK-V3" + } + } + }, + "bench": { + "thickness_mm": 1.6, + "standoff_mm": 3, + "headers": "female" + }, + "artwork": { + "svg": "artwork.svg", + "width_mm": 70.0, + "height_mm": 82.5, + "hotspots": [ + { + "port": "U5V", + "selector": "#pin-u5v" + }, + { + "component": "JP5_STLK", + "selector": "#jp5-stlk", + "input": "closed" + }, + { + "component": "JP5_VIN", + "selector": "#jp5-vin", + "input": "closed" + }, + { + "component": "JP5_E5V", + "selector": "#jp5-e5v", + "input": "closed" + }, + { + "component": "JP5_CHGR", + "selector": "#jp5-chgr", + "input": "closed" + }, + { + "component": "JP6", + "selector": "#jp6", + "input": "closed" + }, + { + "component": "JP7", + "selector": "#jp7", + "input": "closed" + }, + { + "port": "IDD_3V3", + "selector": "#pin-idd_3v3" + }, + { + "port": "IDD_VDD", + "selector": "#pin-idd_vdd" + }, + { + "component": "B1", + "selector": "#btn-user", + "input": "pressed" + }, + { + "component": "B2", + "selector": "#btn-reset", + "input": "pressed" + }, + { + "component": "LD2", + "selector": "#led-ld2", + "output": "luminance" + }, + { + "component": "LD3", + "selector": "#led-ld3", + "output": "luminance" + }, + { + "port": "D0", + "selector": "#pin-d0" + }, + { + "port": "D1", + "selector": "#pin-d1" + }, + { + "port": "D2", + "selector": "#pin-d2" + }, + { + "port": "D3", + "selector": "#pin-d3" + }, + { + "port": "D4", + "selector": "#pin-d4" + }, + { + "port": "D5", + "selector": "#pin-d5" + }, + { + "port": "D6", + "selector": "#pin-d6" + }, + { + "port": "D7", + "selector": "#pin-d7" + }, + { + "port": "D8", + "selector": "#pin-d8" + }, + { + "port": "D9", + "selector": "#pin-d9" + }, + { + "port": "D10", + "selector": "#pin-d10" + }, + { + "port": "D11", + "selector": "#pin-d11" + }, + { + "port": "D12", + "selector": "#pin-d12" + }, + { + "port": "D13", + "selector": "#pin-d13" + }, + { + "port": "D14", + "selector": "#pin-d14" + }, + { + "port": "D15", + "selector": "#pin-d15" + }, + { + "port": "GND_D", + "selector": "#pin-gnd_d" + }, + { + "port": "AREF", + "selector": "#pin-aref" + }, + { + "port": "IOREF", + "selector": "#pin-ioref" + }, + { + "port": "RESET", + "selector": "#pin-reset" + }, + { + "port": "3V3", + "selector": "#pin-3v3" + }, + { + "port": "5V", + "selector": "#pin-5v" + }, + { + "port": "GND", + "selector": "#pin-gnd" + }, + { + "port": "GND_2", + "selector": "#pin-gnd_2" + }, + { + "port": "VIN", + "selector": "#pin-vin" + }, + { + "port": "A0", + "selector": "#pin-a0" + }, + { + "port": "A1", + "selector": "#pin-a1" + }, + { + "port": "A2", + "selector": "#pin-a2" + }, + { + "port": "A3", + "selector": "#pin-a3" + }, + { + "port": "A4", + "selector": "#pin-a4" + }, + { + "port": "A5", + "selector": "#pin-a5" + }, + { + "port": "CN7_1", + "selector": "#pin-cn7_1" + }, + { + "port": "CN7_2", + "selector": "#pin-cn7_2" + }, + { + "port": "CN7_3", + "selector": "#pin-cn7_3" + }, + { + "port": "CN7_4", + "selector": "#pin-cn7_4" + }, + { + "port": "CN7_5", + "selector": "#pin-cn7_5" + }, + { + "port": "E5V", + "selector": "#pin-e5v" + }, + { + "port": "CN7_7", + "selector": "#pin-cn7_7" + }, + { + "port": "CN7_8", + "selector": "#pin-cn7_8" + }, + { + "port": "CN7_12", + "selector": "#pin-cn7_12" + }, + { + "port": "CN7_13", + "selector": "#pin-cn7_13" + }, + { + "port": "CN7_14", + "selector": "#pin-cn7_14" + }, + { + "port": "CN7_15", + "selector": "#pin-cn7_15" + }, + { + "port": "CN7_16", + "selector": "#pin-cn7_16" + }, + { + "port": "CN7_17", + "selector": "#pin-cn7_17" + }, + { + "port": "CN7_18", + "selector": "#pin-cn7_18" + }, + { + "port": "CN7_19", + "selector": "#pin-cn7_19" + }, + { + "port": "CN7_20", + "selector": "#pin-cn7_20" + }, + { + "port": "CN7_21", + "selector": "#pin-cn7_21" + }, + { + "port": "CN7_22", + "selector": "#pin-cn7_22" + }, + { + "port": "CN7_23", + "selector": "#pin-cn7_23" + }, + { + "port": "CN7_24", + "selector": "#pin-cn7_24" + }, + { + "port": "CN7_25", + "selector": "#pin-cn7_25" + }, + { + "port": "CN7_27", + "selector": "#pin-cn7_27" + }, + { + "port": "CN7_28", + "selector": "#pin-cn7_28" + }, + { + "port": "CN7_30", + "selector": "#pin-cn7_30" + }, + { + "port": "CN7_32", + "selector": "#pin-cn7_32" + }, + { + "port": "CN7_33", + "selector": "#pin-cn7_33" + }, + { + "port": "CN7_34", + "selector": "#pin-cn7_34" + }, + { + "port": "CN7_35", + "selector": "#pin-cn7_35" + }, + { + "port": "CN7_36", + "selector": "#pin-cn7_36" + }, + { + "port": "CN7_37", + "selector": "#pin-cn7_37" + }, + { + "port": "CN7_38", + "selector": "#pin-cn7_38" + }, + { + "port": "CN10_1", + "selector": "#pin-cn10_1" + }, + { + "port": "CN10_2", + "selector": "#pin-cn10_2" + }, + { + "port": "CN10_3", + "selector": "#pin-cn10_3" + }, + { + "port": "CN10_4", + "selector": "#pin-cn10_4" + }, + { + "port": "CN10_5", + "selector": "#pin-cn10_5" + }, + { + "port": "CN10_6", + "selector": "#pin-cn10_6" + }, + { + "port": "CN10_7", + "selector": "#pin-cn10_7" + }, + { + "port": "CN10_8", + "selector": "#pin-cn10_8" + }, + { + "port": "CN10_9", + "selector": "#pin-cn10_9" + }, + { + "port": "CN10_11", + "selector": "#pin-cn10_11" + }, + { + "port": "CN10_12", + "selector": "#pin-cn10_12" + }, + { + "port": "CN10_13", + "selector": "#pin-cn10_13" + }, + { + "port": "CN10_14", + "selector": "#pin-cn10_14" + }, + { + "port": "CN10_15", + "selector": "#pin-cn10_15" + }, + { + "port": "CN10_16", + "selector": "#pin-cn10_16" + }, + { + "port": "CN10_17", + "selector": "#pin-cn10_17" + }, + { + "port": "CN10_18", + "selector": "#pin-cn10_18" + }, + { + "port": "CN10_19", + "selector": "#pin-cn10_19" + }, + { + "port": "CN10_20", + "selector": "#pin-cn10_20" + }, + { + "port": "CN10_21", + "selector": "#pin-cn10_21" + }, + { + "port": "CN10_22", + "selector": "#pin-cn10_22" + }, + { + "port": "CN10_23", + "selector": "#pin-cn10_23" + }, + { + "port": "CN10_24", + "selector": "#pin-cn10_24" + }, + { + "port": "CN10_25", + "selector": "#pin-cn10_25" + }, + { + "port": "CN10_26", + "selector": "#pin-cn10_26" + }, + { + "port": "CN10_27", + "selector": "#pin-cn10_27" + }, + { + "port": "CN10_28", + "selector": "#pin-cn10_28" + }, + { + "port": "CN10_29", + "selector": "#pin-cn10_29" + }, + { + "port": "CN10_30", + "selector": "#pin-cn10_30" + }, + { + "port": "CN10_31", + "selector": "#pin-cn10_31" + }, + { + "port": "CN10_32", + "selector": "#pin-cn10_32" + }, + { + "port": "CN10_33", + "selector": "#pin-cn10_33" + }, + { + "port": "CN10_34", + "selector": "#pin-cn10_34" + }, + { + "port": "CN10_35", + "selector": "#pin-cn10_35" + }, + { + "port": "CN10_37", + "selector": "#pin-cn10_37" + } + ] + }, + "toolchains": { + "embcc": { + "target": "thumbv7em-none-eabihf", + "linker_script": "stm32g474re.ld" + }, + "gcc-arm": { + "cpu": "cortex-m4", + "flags": [ + "-mthumb", + "-mcpu=cortex-m4", + "-mfpu=fpv4-sp-d16", + "-mfloat-abi=hard" + ], + "linker_script": "stm32g474re.ld" + }, + "clang": { + "target": "thumbv7em-none-eabihf", + "flags": [ + "-mcpu=cortex-m4", + "-mfpu=fpv4-sp-d16", + "-mfloat-abi=hard" + ], + "linker_script": "stm32g474re.ld" + } + }, + "fidelity": { + "functional": { + "claims": "Nets, ports, LD2, LD3, B1, B2 and the jumpers as parts; the STM32G474RE runs its firmware (see its description), its HSE the 24 MHz crystal X3 (HSEBYP clear, as on the real board) and its LSE the X2 crystal; its option bytes as ST ships the board (nSWBOOT0 0, nBOOT0 1: it boots its flash whatever PB8 is). The Arduino connectors carry UM2505's assignment (D0/D1 on PC5/PC4, USART1) and the morpho headers CN7 and CN10 every pin they bring out. The STLINK-V3E's virtual COM port is the session's console on LPUART1 (PA2/PA3) and a serial port on the host.", + "omissions": [ + "the STLINK-V3E itself: its USB enumeration (0483:374E), the mass-storage drag-and-drop programming, SWD and its NRST drive, LD1 (COM); the session programs and debugs the board (ADR-031)", + "the VCP's bytes reach LPUART1 directly, not as frames on PA3", + "the solder bridges are fixed in a default state: PC14/PC15 and PF0/PF1 on the crystals, not on the morpho headers; the rest as UM2505's tables give them, which were not at hand: CN7's and CN10's assignment follows Zephyr's board files", + "a single JP5 shunt sits on one position only; the four switches here can all be closed", + "ST's BSP (stm32g4xx_nucleo.c) configures B1 as a rising edge with a pull-down; on this board (an external pull-up, a press pulling PC13 low) that BSP sees a press when B1 is released, as it would on the bench" + ], + "validation": [ + "tests/*.json" + ] + }, + "timed": { + "claims": "As functional.", + "omissions": [ + "as functional" + ], + "validation": [ + "tests/*.json" + ] + }, + "electrical": { + "claims": "The power paths of UM2505 6.4: the STLINK-V3E's USB 5 V (U5V) through JP5 pins 1-2 to +5V; VIN (7 to 12 V) through U11 (LD1117S50) and JP5 pins 3-4; E5V through pins 5-6; the USB charger position (pins 7-8) from CN1's VBUS; U12 (LD39050PU33R) makes +3.3V and JP6 (IDD) carries it to VDD, VBAT and VDDA/VREF+. LD3 shows +5V, LD2 is lit by PA5, a 4.7 kOhm pull-up holds PC13 high and B1 pulls it to ground through 100 ohm with a 100 nF capacitor on PC13, C_NRST holds NRST low at power-on against the STM32's pull-up; X3 and X2 are crystals' equivalent circuits.", + "omissions": [ + "MB1367's schematic was not at hand: the LED resistors, B1's network, C_NRST and JP7's pull-down are the Nucleo-64 boards' usual values, assumed; designators other than UM2505's (U11, U12, JP5, JP6, JP7, LD1-LD3, B1, B2, X2, X3, CN1, CN5-CN10) are EmbSIM's", + "the STLINK-V3E's power switch and current negotiation between its USB VBUS and JP5's STLK position (taken as closed), its own supply and current", + "decoupling and bulk capacitors, ESD protection", + "the STM32's supply current: VDD carries only what the pins drive", + "the ferrite bead between VDD and VDDA is taken as a short" + ], + "validation": [ + "tests/*.json" + ] + } + }, + "provenance": { + "author": "EmbSIM", + "license": "Apache-2.0", + "sources": [ + { + "title": "UM2505 STM32G4 Nucleo-64 boards (MB1367) user manual: JP5's positions, JP6, the regulators U11 and U12, LD1-LD3, as its search excerpts give them", + "url": "https://www.st.com/resource/en/user_manual/um2505-stm32g4-nucleo64-boards-mb1367-stmicroelectronics.pdf" + }, + { + "title": "Zephyr's nucleo_g474re board files (Apache-2.0): the LEDs, B1, the console, the Arduino and morpho connectors' pin assignment" + }, + { + "title": "STM32CubeG4's NUCLEO-G474RE projects (BSD-3-Clause): HSE_VALUE 24 MHz, LPUART1 on PA2/PA3 (AF12) as the VCP, B1's falling edge (GPIO_EXTI, EXTI_ToggleLedOnIT)" + }, + { + "title": "ST community, 'NUCLEO-G474RE: what is the intended use of JP7' (2019): the board ships with nSWBOOT0 0, PB8 an ordinary I/O; JP7 pulls BOOT0/PB8 down" + } + ], + "notes": "Artwork is an original SVG drawn for EmbSIM to the Nucleo-64's 70 x 82.5 mm outline; no ST artwork or logo is used." + }, + "tests": [ + "tests/*.json" + ], + "i18n": { + "fr": { + "source": "a18d33293d3f", + "description": "La NUCLEO-G474RE de ST (MB1367) : un STM32G474RET6 avec le quartz HSE X3 de 24 MHz et le quartz LSE X2 de 32,768 kHz, la LED utilisateur verte LD2 sur PA5, le bouton bleu USER sur PC13, le bouton noir RESET, la LED d'alimentation verte LD3, JP5 choisissant l'USB du STLINK-V3E, VIN, E5V ou un chargeur USB, JP6 (IDD) pour mesurer le courant du MCU, les connecteurs Arduino Uno V3 et les deux connecteurs morpho ST. Le port COM virtuel du STLINK-V3E est la console série de la session sur le LPUART1 (PA2/PA3), et un port série sur l'hôte (embsim serve --serial).", + "fidelity": { + "functional": { + "claims": "Réseaux, ports, LD2, LD3, B1, B2 et les cavaliers comme composants ; le STM32G474RE exécute son micrologiciel (voir sa description), son HSE le quartz X3 de 24 MHz (HSEBYP à 0, comme sur la vraie carte) et son LSE le quartz X2 ; ses octets d'option tels que ST livre la carte (nSWBOOT0 à 0, nBOOT0 à 1 : il démarre sur sa flash quel que soit PB8). Les connecteurs Arduino suivent l'affectation de l'UM2505 (D0/D1 sur PC5/PC4, l'USART1) et les connecteurs morpho CN7 et CN10 chaque broche qu'ils portent. Le port COM virtuel du STLINK-V3E est la console de la session sur le LPUART1 (PA2/PA3) et un port série sur l'hôte.", + "omissions": [ + "le STLINK-V3E lui-même : son énumération USB (0483:374E), la programmation par glisser-déposer sur stockage de masse, le SWD et sa commande de NRST, LD1 (COM) ; la session programme et débogue la carte (ADR-031)", + "les octets du VCP arrivent directement au LPUART1, pas comme des trames sur PA3", + "les ponts de soudure sont figés dans un état par défaut : PC14/PC15 et PF0/PF1 sur les quartz, pas sur les connecteurs morpho ; les autres tels que les tables de l'UM2505 les donnent, qui n'étaient pas sous la main : l'affectation de CN7 et CN10 suit les fichiers de carte de Zephyr", + "un seul cavalier JP5 ne tient que sur une position ; les quatre interrupteurs ici peuvent tous être fermés", + "la BSP de ST (stm32g4xx_nucleo.c) configure B1 sur un front montant avec un tirage vers le bas ; sur cette carte (un tirage externe vers le haut, un appui tirant PC13 au niveau bas) cette BSP voit l'appui au relâchement de B1, comme elle le ferait sur le banc" + ] + }, + "timed": { + "claims": "Comme le niveau fonctionnel.", + "omissions": [ + "comme le niveau fonctionnel" + ] + }, + "electrical": { + "claims": "Les chemins d'alimentation de l'UM2505 6.4 : le 5 V de l'USB du STLINK-V3E (U5V) par les broches 1-2 de JP5 vers +5V ; VIN (7 à 12 V) par U11 (LD1117S50) et les broches 3-4 de JP5 ; E5V par les broches 5-6 ; la position chargeur USB (broches 7-8) depuis le VBUS de CN1 ; U12 (LD39050PU33R) fait le +3,3V et JP6 (IDD) le porte vers VDD, VBAT et VDDA/VREF+. LD3 indique le +5V, LD2 est allumée par PA5, un tirage de 4,7 kOhm tient PC13 au niveau haut et B1 le tire à la masse à travers 100 ohms avec un condensateur de 100 nF sur PC13, C_NRST tient NRST bas à la mise sous tension face au tirage interne du STM32 ; X3 et X2 sont les circuits équivalents de quartz.", + "omissions": [ + "le schéma de la MB1367 n'était pas sous la main : les résistances des LED, le réseau de B1, C_NRST et le tirage de JP7 sont les valeurs habituelles des cartes Nucleo-64, supposées ; les repères autres que ceux de l'UM2505 (U11, U12, JP5, JP6, JP7, LD1-LD3, B1, B2, X2, X3, CN1, CN5-CN10) sont ceux d'EmbSIM", + "l'interrupteur d'alimentation et la négociation de courant du STLINK-V3E entre le VBUS de son USB et la position STLK de JP5 (pris comme fermé), sa propre alimentation et son courant", + "les condensateurs de découplage et de réservoir, la protection ESD", + "le courant d'alimentation du STM32 : VDD ne porte que ce que pilotent les broches", + "la ferrite entre VDD et VDDA est prise comme un court-circuit" + ] + } + } + } + } +} diff --git a/catalog/boards/nucleo_g474re/stm32g474re.ld b/catalog/boards/nucleo_g474re/stm32g474re.ld new file mode 100644 index 000000000..e79fc0ffe --- /dev/null +++ b/catalog/boards/nucleo_g474re/stm32g474re.ld @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* Copyright 2026 Junior Deogracias */ +/* STM32G474RE: 512 KiB of flash at 0x08000000, 128 KiB of SRAM at 0x20000000 (SRAM1 80 KiB, SRAM2 16 KiB, then the CCM SRAM's 32 KiB alias) */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 128K +} +ENTRY(Reset_Handler) +_estack = ORIGIN(RAM) + LENGTH(RAM); +SECTIONS +{ + .isr_vector : { KEEP(*(.isr_vector)) } > FLASH + .text : { *(.text*) *(.rodata*) . = ALIGN(4); } > FLASH + .ARM.exidx : { *(.ARM.exidx*) } > FLASH + _sidata = LOADADDR(.data); + .data : { _sdata = .; *(.data*) . = ALIGN(4); _edata = .; } > RAM AT > FLASH + .bss (NOLOAD) : { _sbss = .; *(.bss*) *(COMMON) . = ALIGN(4); _ebss = .; } > RAM +} diff --git a/catalog/boards/nucleo_g474re/tests/e5v.json b/catalog/boards/nucleo_g474re/tests/e5v.json new file mode 100644 index 000000000..7463a6379 --- /dev/null +++ b/catalog/boards/nucleo_g474re/tests/e5v.json @@ -0,0 +1,77 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "e5v", + "description": "An external 5 V supply on E5V (CN7 pin 6) with JP5 on E5V (pins 5-6): +5V, LD3 and +3.3V without USB.", + "policy": "electrical", + "until": "20ms", + "circuit": { + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re" + } + ], + "components": [ + { + "id": "VS", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5.0 + } + }, + { + "id": "G", + "component": "emblink/gnd" + } + ], + "nets": { + "E5V": [ + "VS.+", + "B1.E5V" + ], + "GND": [ + "VS.-", + "G.GND", + "B1.GND" + ], + "R5": [ + "B1.5V" + ], + "VDD": [ + "B1.CN7_5" + ] + } + }, + "inputs": [ + { + "at": "0ms", + "target": "B1.JP5_STLK", + "input": "closed", + "value": false + }, + { + "at": "0ms", + "target": "B1.JP5_E5V", + "input": "closed", + "value": true + } + ], + "expect": { + "net:R5": { + "at": "10ms", + "min_v": 4.95, + "max_v": 5.0 + }, + "net:VDD": { + "at": "10ms", + "min_v": 3.25, + "max_v": 3.35 + }, + "output:B1.LD3.luminance": { + "at": "10ms", + "min": 0.05 + } + } +} diff --git a/catalog/boards/nucleo_g474re/tests/idd-ammeter.json b/catalog/boards/nucleo_g474re/tests/idd-ammeter.json new file mode 100644 index 000000000..4e83685a2 --- /dev/null +++ b/catalog/boards/nucleo_g474re/tests/idd-ammeter.json @@ -0,0 +1,82 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "idd-ammeter", + "description": "JP6 removed and an ammeter (1 ohm shunt) across its pins: VDD is powered through the meter.", + "policy": "electrical", + "until": "20ms", + "circuit": { + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re" + } + ], + "components": [ + { + "id": "HOST", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5.0 + } + }, + { + "id": "CABLE", + "component": "emblink/resistor", + "params": { + "resistance": 0.25 + } + }, + { + "id": "G", + "component": "emblink/gnd" + }, + { + "id": "AM", + "component": "emblink/resistor", + "params": { + "resistance": 1.0 + } + } + ], + "nets": { + "HOSTV": [ + "HOST.+", + "CABLE.1" + ], + "VBUS": [ + "CABLE.2", + "B1.U5V" + ], + "GND": [ + "HOST.-", + "G.GND", + "B1.GND" + ], + "IA": [ + "B1.IDD_3V3", + "AM.1" + ], + "IB": [ + "B1.IDD_VDD", + "AM.2" + ] + } + }, + "inputs": [ + { + "at": "0ms", + "target": "B1.JP6", + "input": "closed", + "value": false + } + ], + "expect": { + "net:IB": { + "at": "10ms", + "min_v": 3.2, + "max_v": 3.35 + } + } +} diff --git a/catalog/boards/nucleo_g474re/tests/usb-powered.json b/catalog/boards/nucleo_g474re/tests/usb-powered.json new file mode 100644 index 000000000..6e573331a --- /dev/null +++ b/catalog/boards/nucleo_g474re/tests/usb-powered.json @@ -0,0 +1,107 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "usb-powered", + "description": "Plugged into a computer's USB port through a 0.25 ohm cable, JP5 on STLK (the factory position): +5V from the STLINK-V3E's USB, LD3 lights, U12 makes +3.3V and JP6 carries it to VDD, VBAT and VDDA; PC13 (B1 released) is high and PB8 (D15) floats with JP7 not fitted.", + "policy": "electrical", + "until": "20ms", + "circuit": { + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re" + } + ], + "components": [ + { + "id": "HOST", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5.0 + } + }, + { + "id": "CABLE", + "component": "emblink/resistor", + "params": { + "resistance": 0.25 + } + }, + { + "id": "G", + "component": "emblink/gnd" + } + ], + "nets": { + "HOSTV": [ + "HOST.+", + "CABLE.1" + ], + "VBUS": [ + "CABLE.2", + "B1.U5V" + ], + "GND": [ + "HOST.-", + "G.GND", + "B1.GND" + ], + "R5": [ + "B1.5V" + ], + "R33": [ + "B1.3V3" + ], + "VDD": [ + "B1.CN7_5" + ], + "AVDD": [ + "B1.AREF" + ], + "VBAT": [ + "B1.CN7_33" + ], + "BTN": [ + "B1.CN7_23" + ] + } + }, + "inputs": [], + "expect": { + "net:R5": { + "at": "10ms", + "min_v": 4.85, + "max_v": 5.0 + }, + "net:R33": { + "at": "10ms", + "min_v": 3.25, + "max_v": 3.35 + }, + "net:VDD": { + "at": "10ms", + "min_v": 3.25, + "max_v": 3.35 + }, + "net:AVDD": { + "at": "10ms", + "min_v": 3.25, + "max_v": 3.35 + }, + "net:VBAT": { + "at": "10ms", + "min_v": 3.25, + "max_v": 3.35 + }, + "output:B1.LD3.luminance": { + "at": "10ms", + "min": 0.05 + }, + "net:BTN": { + "at": "10ms", + "min_v": 3.25, + "max_v": 3.35 + } + } +} diff --git a/catalog/boards/nucleo_g474re/tests/user-button.json b/catalog/boards/nucleo_g474re/tests/user-button.json new file mode 100644 index 000000000..4aa691da4 --- /dev/null +++ b/catalog/boards/nucleo_g474re/tests/user-button.json @@ -0,0 +1,70 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "user-button", + "description": "B1 (USER) pulls PC13 to ground through 100 ohm while pressed, against the 4.7 kOhm pull-up: about 69 mV (usb-powered checks the idle level).", + "policy": "electrical", + "until": "20ms", + "circuit": { + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re" + } + ], + "components": [ + { + "id": "HOST", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5.0 + } + }, + { + "id": "CABLE", + "component": "emblink/resistor", + "params": { + "resistance": 0.25 + } + }, + { + "id": "G", + "component": "emblink/gnd" + } + ], + "nets": { + "HOSTV": [ + "HOST.+", + "CABLE.1" + ], + "VBUS": [ + "CABLE.2", + "B1.U5V" + ], + "GND": [ + "HOST.-", + "G.GND", + "B1.GND" + ], + "BTN": [ + "B1.CN7_23" + ] + } + }, + "inputs": [ + { + "at": "10ms", + "target": "B1.B1", + "input": "pressed", + "value": true + } + ], + "expect": { + "net:BTN": { + "at": "15ms", + "min_v": 0.055, + "max_v": 0.085 + } + } +} diff --git a/catalog/boards/nucleo_g474re/tests/vin-jp5.json b/catalog/boards/nucleo_g474re/tests/vin-jp5.json new file mode 100644 index 000000000..d6d9b03e6 --- /dev/null +++ b/catalog/boards/nucleo_g474re/tests/vin-jp5.json @@ -0,0 +1,86 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "vin-jp5", + "description": "9 V on VIN, JP5 moved to VIN (pins 3-4) and a 100 mA load on +5V: U11 (LD1117S50) supplies +5V and U12 still makes 3.3 V.", + "policy": "electrical", + "until": "20ms", + "circuit": { + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re" + } + ], + "components": [ + { + "id": "VS", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 9.0 + } + }, + { + "id": "G", + "component": "emblink/gnd" + }, + { + "id": "RL", + "component": "emblink/resistor", + "params": { + "resistance": 50.0 + } + } + ], + "nets": { + "VIN": [ + "VS.+", + "B1.VIN" + ], + "GND": [ + "VS.-", + "G.GND", + "B1.GND", + "RL.2" + ], + "R5": [ + "B1.5V", + "RL.1" + ], + "VDD": [ + "B1.CN7_5" + ] + } + }, + "inputs": [ + { + "at": "0ms", + "target": "B1.JP5_STLK", + "input": "closed", + "value": false + }, + { + "at": "0ms", + "target": "B1.JP5_VIN", + "input": "closed", + "value": true + } + ], + "expect": { + "net:R5": { + "at": "15ms", + "min_v": 4.85, + "max_v": 5.1 + }, + "net:VDD": { + "at": "15ms", + "min_v": 3.25, + "max_v": 3.35 + }, + "output:B1.LD3.luminance": { + "at": "15ms", + "min": 0.05 + } + } +} diff --git a/catalog/boards/nucleo_g474re/tests/vin-needs-jp5.json b/catalog/boards/nucleo_g474re/tests/vin-needs-jp5.json new file mode 100644 index 000000000..b0ce9ebe8 --- /dev/null +++ b/catalog/boards/nucleo_g474re/tests/vin-needs-jp5.json @@ -0,0 +1,62 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "vin-needs-jp5", + "description": "9 V on VIN with JP5 still on STLK: U11 makes its 5 V, but nothing joins it to +5V, so the board stays dark (UM2505: JP5 must be moved to VIN).", + "policy": "electrical", + "until": "20ms", + "circuit": { + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re" + } + ], + "components": [ + { + "id": "VS", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 9.0 + } + }, + { + "id": "G", + "component": "emblink/gnd" + } + ], + "nets": { + "VIN": [ + "VS.+", + "B1.VIN" + ], + "GND": [ + "VS.-", + "G.GND", + "B1.GND" + ], + "R5": [ + "B1.5V" + ], + "VDD": [ + "B1.CN7_5" + ] + } + }, + "inputs": [], + "expect": { + "net:R5": { + "at": "10ms", + "max_v": 0.3 + }, + "net:VDD": { + "at": "10ms", + "max_v": 0.3 + }, + "output:B1.LD3.luminance": { + "at": "10ms", + "max": 0.001 + } + } +} diff --git a/docs/STATUS.md b/docs/STATUS.md index 3e8a165db..c58508491 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -5,6 +5,58 @@ maintained by hand until evidence tooling exists. It is not a generated support matrix. Specifications define target contracts; their acceptance does not mean the described behaviour exists. +## The STM32G474RE and the NUCLEO-G474RE (2026-11-12) + +A second STM32 family: `st/stm32g474re` (Cortex-M4F at 170 MHz, 512 KiB of +dual-bank flash, SRAM1, SRAM2 and the CCM SRAM) on `emblink/nucleo_g474re` +(MB1367). Its registers come from ST's STM32G474.svd v3.0 with the +corrections `tools/importers/stm32g474_regs.sh` lists, its pins and +alternate functions from ST's open pin data. The G4's own IP has new models: +the RCC (`stm32g4-rcc`), PWR (`stm32g4-pwr`), flash interface +(`stm32g4-flash`) and the U(S)ARTs and LPUART (`stm32-usart-v2`); GPIO, +SYSCFG, EXTI, the timers, CRC, the watchdogs and DBGMCU are the F4's models +taught the G4's registers. 34 of the 82 peripheral blocks are modelled +(`docs/coverage.md`); the ADCs, DACs, comparators, op-amps, DMA and DMAMUX, +I2C, SPI, RTC, the FDCANs, USB, HRTIM, the math accelerators and the rest +keep their registers until their models land. + +Evidence: +- `test_stm32g4` (13 tests): reset values and the factory option bytes, + 170 MHz from HSI16 and from the 24 MHz crystal in range 1 boost, the + spec warnings, the oscillators' start-up times and ready interrupts, the + reset flags, GPIO with BRR and EXTI13 on PC13, LPUART1 at 115200 with + TEACK, its FIFO and ORE, USART1's 7-bit MSB-first frames from HSI16, the + programmable CRC on ST's examples' values, double-word programming, + PROGERR and SIZERR, a page erase's 22 ms and the option bytes' write + protection through OBL_LAUNCH, the IWDG's window, the WWDG's /128, Stop 1 + and Standby with SRAM2 kept and PA0's wake-up, and CONTROL.SPSEL in a + handler; +- the board's six fixtures (USB, VIN, E5V, VIN without JP5, the IDD + ammeter, B1); +- 21 of STM32CubeG4's NUCLEO-G474RE examples built unmodified + (`tests/vendor/stm32cubeg4/run.py`, also in CI): GPIO_IOToggle, + GPIO_EXTI, HAL_TimeBase_TIM, RCC_ClockConfig (the PLL moved between HSI16 + and the crystal on B1), UART_Printf, the four CRC examples, + CORTEXM_ModePrivilege, CORTEXM_ProcessStack, CORTEXM_SysTick, + FLASH_EraseProgram (5.3 s of erasing and programming the bank it runs + from, stalled through each operation), FLASH_FastProgram (bank 2 written + while bank 1 runs on), IWDG_Reset, IWDG_WindowMode (a refresh before the + window resets the part), WWDG_Example, PWR_STOP0, TIM_PWMOutput (85 kHz + on TIM1's four channels) and TIM_OCToggle. + +Found on the way: exception entry did not clear CONTROL.SPSEL (every +Cortex-M part), and IWDG_Reset's "invalid address" 0x00040001 lies inside +the G474's 512 KiB flash alias: the store sets PGSERR without a fault, so +on this part the example's IWDG reset does not come (its scenario says so; +not checked on a board). + +Not yet: the peripherals above, the timers' G4 additions (OCxM's and SMS's +fourth bits, channels 5 and 6, dithering, the encoder index, the G4's ITR +table), the STLINK-V3E itself (its USB, SWD and drive), MB1367's own +resistor and capacitor values (the Nucleo-64's usual ones are assumed: its +schematic was not at hand), the datasheet's start-up and flash times +checked against DS12288 itself. + ## DC motors and their driver, the robot's first parts (2026-11-08) M7's robot on the floor begins with its motors. `dc_motor` diff --git a/docs/gallery/README.md b/docs/gallery/README.md index 115e2093f..c208ee932 100644 --- a/docs/gallery/README.md +++ b/docs/gallery/README.md @@ -213,6 +213,20 @@ probes (`output:PC.HOST.*`), checked by the vendor scenario. |---|---| | ![The USB project in the Design workspace: the board, the ST-LINK supply and the PC's port, the OTG nets listed](nucleo-f446ze/design-usb-hid.png) | ![It running past enumeration: the USB host's probes, OTG_VBUS at 5 V among the meters](nucleo-f446ze/run-usb-hid.png) | +## The NUCLEO-G474RE (2026-11-12) + +ST's Nucleo-64 board (MB1367) with its STM32G474RE, a second STM32 family, +running `examples/nucleo-g474re-blink-serial`: 170 MHz from the 24 MHz +crystal X3 in range 1 boost, LD2 blinking, the USER button on EXTI13's +falling edge, the virtual COM port on LPUART1. Its jumpers are controls: +JP5's four supply positions (STLK, VIN, E5V, CHGR), JP6 (IDD) and JP7. The +artwork is drawn for EmbSIM to the 70 x 82.5 mm outline, its positions +approximate until a dimensioned drawing gives `reference.json`. + +| Design | Run | Board | +|---|---|---| +| ![The NUCLEO-G474RE example in the Design workspace](nucleo-g474re/design-nucleo-g474re.png) | ![The example running: VDD on the oscilloscope, LD2 on the logic analyzer, JP5's positions and JP6 among the controls](nucleo-g474re/run-nucleo-g474re.png) | ![The board's 2D face on the bench: LD2 and LD3 lit, JP5 on STLK](nucleo-g474re/board-nucleo-g474re.png) | + ## The NUCLEO-F446ZE (2026-10-31) ST's Nucleo-144 board (MB1137) with its STM32F446ZE in LQFP144, running diff --git a/docs/gallery/nucleo-g474re/board-nucleo-g474re.png b/docs/gallery/nucleo-g474re/board-nucleo-g474re.png new file mode 100644 index 0000000000000000000000000000000000000000..26f514344e710984266db521cbab908545542c5c GIT binary patch literal 94949 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 Iv&-qsZ#;vi{Qv*} literal 0 HcmV?d00001 diff --git a/docs/gallery/nucleo-g474re/design-nucleo-g474re.png b/docs/gallery/nucleo-g474re/design-nucleo-g474re.png new file mode 100644 index 0000000000000000000000000000000000000000..134a417a63ebdc07172113f065ae970c2deda69b GIT binary patch literal 190390 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�O0@Ro0|KBG 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�)JeRV)+{3|8eysR2%(gR7ml0>ohwg@ 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%0DY}Svz19zwy1@{>ew}?qNm7GcTG9Np0X~lS~~xo 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

AB!n`hm9~9 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 Lj>qQck^=q)N;pY7 literal 94949 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 Iv&-qsZ#;vi{Qv*} diff --git a/docs/gallery/nucleo-g474re/design-nucleo-g474re.png b/docs/gallery/nucleo-g474re/design-nucleo-g474re.png index 134a417a63ebdc07172113f065ae970c2deda69b..782a47a51d8b275a05b46adcaefff88d1a7c8395 100644 GIT binary patch literal 190365 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%0DaBmU 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
V>xTJ-;Ym#8LL`Sw7{j6A5@x3psRA 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

-YzG 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 literal 190390 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�O0@Ro0|KBG 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%0A4=9#xu%rLmembJr-^^LmX$#oOX}j3?*k?Y^ z|LocbQvS?@?@DsB1s9WVa8ib z10LEfMMY;&?@9tK;rEb9>*HDnXC+WY|81=T@iZ^=pWvIo{W}pHD-9 z9B(e;-P*Z*sodnW*O+ylF6~`DozKYQPP>qKpPp0O3BCjU7LGdGa>C%@nM;kC-XAS( zx_vTR_Bd5;tSGWNaB#WP^;NK4^{U`U-@;VNtZ>s-DOI9@pYCX37Jx^Na}&CUdFkj} z>9-Nwu>U3%*1Oe(G+-gGx%~A7If|M5OfsM=iqZGlI|)leOKtGq=JAj)JCA^R-6Dml z-5sQoNrk}qPe@&xXjMKJKrJ{KzD8zGngd1c3X!fR1K5mBa10~pYn$&e<>NY*;KSK= zYT}5ze58OQ8v+L{Z}%tFUMHRurt#i(SEeK$o_Ca_)#c6gojjc31PdoUYjp)~AJvgx zRuMu@Wu$>wJFu^}abL{-h?eYkm5P?9ju&>jI5jiSxrR_HB*vLH7ZKY6`MdQ5LWj-K zBTSn3W*}R=G%%;l{MOD63lqK1=(3oCLUhoTF4mZHT!Q+;{q`sV2FWa;cCfI!MOD&W zb~b*vGUnc3YJBk}PKRc5;=ra#SfprPl9#?b@#ubdj6FdjvG;@bb{0G1C+UE9{rt60yY)IWU#gN4grH6sd9_;aVOq=bY+Y34YOj^d1B~R0 zR0xw&uX8U>grv`p>`}h)*Pfm~fI``&r~{9@mP={<9$Tp2)2!&~uU^ou|Eo&7Wl4*EcWTCZPid@8%2hW&MFsI%Fb)W!5n+*@S%zBxmIU%$h37PCsrK0fonri z`SkJ%@#5M)HST7oYXVuxKFND%ba7CsMIQp~qZe6(#Xvu~KVIo^_&H!aIlu5q4jc

MWocOmN7cODCmn1$BL*?{%H0gf(&c71|y;T_#7 z{L`!8mrDhdmgSvKZBK3b-Ud2!IR zl#PN5{4-S`Fo0!dV#a}~{ic31VkC|JTNtW~tK-)TAjl`|lf~Tv+79fuUu$YM@B2)1 zy<2T-MwTF#Mv83j$LuDdEyC{s6zP1hSPC>Txi}BzT8FN_`#@p!Gj+nGk)A!?yHMCaIZC&x`+T85>{v#WDiKTlIxVFIJHIkWswK@&2M7JLld!rl}=w3 zh^K8?U#H^mLfgP4ZhmU&Md8(Jm?d{FpNKlxg(wvzdL8tl zSehqFzP8{0E}Pmukri&L?sX_BZ%eVr$dCw2K`8`*=a75Dq)7=pm*$xTlj~v*?pqnM*9k z5D^2Pr&44$v7Q@Bd7d8_S}?jPblxk~uvBTU>&eEt@u~f6AuY)7@>A^*q;>Q5cDPRU z04ygMJFA8^E1ks}gjVb3yzIX36C>DYxppHLd?g0=`UP0q$;nF1gdpzIA0ROzLe)gP z@aPt;-G;}0r?DbNGbX_J=)fYA`^6;!jYu@9(Bs1-#x836&DM7RiBjyf(9^?p{-%bT z!@KT4R5`Ujzzr0zJ6Dp9;e5itrHSfiszry<(+Rr)~%>(RvqTAu-*V4bS~ zHuL#49^R7iBBXznj3b)Ewap+vnB*%4S$SLIM0zwebLZtL*eh|w5kJxUoVJb#cJ`uA zr!0p~%P(c0!9NP!JAssUx_7SDtt~C~*FM!2KF#eqH49v=P_Z!(*k->I71m?p6aa4L ztfo3J#I4~iBQ0k?G_mr<3HHM=((9-94DcKb0k(z)^{lVo^0&P(LJ=Z>nTblij>W;R zyFQVIyh?Z>l%aIiD#2lZ4#Fny2&x5Ge`XW)KFRCwyp-xUurLK5b6JtxWndr0k$cjVkw!j z4AynB^O8{8gIt@-eTv=r3hQ31>-7T^~tR}0Wz2O0DIUig4eVf%CU`}}w5UmwJMEx<=q zR73Vx317lwsG-9yFA@ur#0w!Naoum<1@_<tvjj|O1c>?hlt-q{19fo-BChf-cr4E z`8*}mTB4w>_i9w*&^b23Uy-is*`qUFwjSO?rIY@hPE)p#T6n*5pQ_fXyy|^n_aZ}| zZk3_GyGKq3CEP~85f~B?&w1Nk;aZe)uM+;q60+#YKX0}PJL#aV&*&y8MSS)yeudCWDNU~qsVsT&QN5pNV$9Q zoil!q93HIw(}widi7LugR5#;2P3ghVR=_O;J)V?xA6CoxN9 zO((FuM<#-b3RndJb+v@rwhhKNuyoxjKb4pypelzsHD1;J?)Cn#8DZq<4kJ*+p#Ek} zhAdA-dcW`CPXa#h1)rLppbuQrx@Phjh??lBhxmy*JyO}pGLV%bD(Xh)i0cvG z#4=BkRRK{dkU7XB0j%T>LBC-8w^?2L6%_0Rw57oAm%@FoSq%widnP-G>;6%%?-0zf zdq=elx7Vh(u>%_s`c|>$ffkC@y|&(sSO_Hh_xsq;zOso2%!1<2@VsnSE0xo4|85mF z(aNTtkB(u#M~R-xON*XwQZFO6<-q)$kJi4Y6*~2@?U9+P-q94~83(JkBpQ~xqcsa$DiZKekw)3UD33B(F)i7MilOtto% z0r6+H|GN|cT9QK6Y}zXN!-h2qCRQ2|m0Cj&Yt_=9a#jTyY4OT|p~G3crORUY?&KV<1fh1E6f& z!x{?XJc;P{+_Id>AKxyykLiIR9bHva8T>c*hySh)HjbUp^Vz#>|EAgNHzR%m71|TIS z1@vBruP@Z-;*Z+4x2n$tjlPlhf9MfDI|bXc;YAMjmm6DGV8UfOl)U%auw2r&HBHvy1ae?WUsi8a@N(l=y_%$ zVEtK%T@ea%Mu94SnQo`LfiVp|z-Y&Xp6ap{6N6MI2?I9Js=n@EZOd!{U~B-Y{42E= zDaS=8hqt$x=xy2HDYJ!5H(jb*v^>zJ%qT?S;^M9gVOw6VCa+MDOs zYI|M{$4(U^-)=iHWv2g(c!7h1ycu?H+mfy0M^@49dW2vaBu?jJa>@9aO_04Vw{-72 z{<1RmUaW9ClCjFAPOG3kDFF9l2t5n&@s*dm+aTp1-=btUPHS%Y4F# zC0C`WxyNmWBEFw|M2#+4`n3`3z^~u9$W`K9pJQnsdW?|5oHe#dqrh!l^YoQvO{c%| zp(?6ac`EZiKdC;=S2eWg5RegV0{)J_uMhd`EB?06&N5x&*zP8jW4%y)nBjLV?DsraX9ua-B6Q~M%Jo64s;EYmu%QOKM?X$GWNtbDw;|)#VjU3k-S9h|y=gaVYexg?dl9F7Hx8K5K z?i#WYP?2<<%i+~fbCayRoFZ=aGCxYyywxHQdnFP=^*`Q~++a3BaxWr+DwAXH0IRW? z`%TidN5y`T)v>8cR6uuU=SauT?Y5FCB`Q4k5EFtHT;!h2l@)s}pQaB^2HN`T`|F0I zn_4)l%h!j8{9IhrgBiz7iG#SA1@=?40cDYuTDi*h_D$9$OZ6HXoLgjQ9|?54o$sqS zw}a2k;?>peZ#@H>o2rWbIGTR{V)(CRqq^DZgHm*hWmAZbZsOj#dyxvoJ9Yo?fIk0Z z9g14bvPJty?6&%AWQsCoENLhLy%sqd%J~$ZXfQY5^LztI^msVB7Q9=7a2fn8UD;^~ z(}B#b?)rMv4&@Whj`2@xa%vUweO;9SzX`Cp;0H^-GxtHyu9m-r=0M09lEwlS&|Woh zvf#P?A@qLt4_gNQ2$ji6aTr9C-yKB8p??F1P*fc}{KawJ+R*{efpUZR_ihSU+&cNm ztZXr}5fwdgQCBae%~^hA)KA!zQHMYDzf&V|)MnFk^kwEE%w9e+=51|@y=Mq@P~*gn z{B-iH(64$o4j?t0n1+$I#Lm3FVK$PFEg6-nlf2XfGa=5av8nCq;?19rh>*}dq_>7& zRLfciUmb8o{n>Ke_~zJM70iobQVL_csG6GFp&9N?KeHY8h4}D?GbFT-j*>&k`|G;C zg6FjDR|b{WkFziCsdDPY-7BLDC`p*o3;tEJ7o9fr740sYmsp4CSnW?2gdz#P+*E*d z(BvZv3w41^^J4MHqgdxVwSPdr3HjTGur|Rt6Dh!ggV0{rHU2J$0MUB9A2pKG?8W~n z=)}@{w*aBy-rj+l#wRiJ7&)8cotN0jy6HMvZw`*vKih3@09UsCSp+jjUG2SxS4i+H zV&3$_ZT!MxjQ_{@W!YvHn@*Rkz1__ZA$M77{Mf9=J)hwQlupt|UCk z?8a*Z-^E{IIHUA@*4LZmwh{dzXR_lLs$deOz;=Rw3nX3xb5w_zFrrBf%b!kRv39=A z2j=84RNPIWTe#u>pQ2F9bHgqyb29gEqiQ#^rg3Ruid3V2BAqG~hX`_>Bu)Ww+c1%E z0Ry8m1tFuqu;L#kc!3|#WR8_4g4}+yC*GW4xQNG%h1~ZcS!m`rC6f~FCVm1(Lv4(L zd_RvSChqIC^+W0ZcWH#ifHg{{*L!o-XJ_u+J<@-VkYs!St^ilHbj=cNSZu1ag$L=G z@Pb{r1b;DVDKAC0#NvhCSYfE%eT=K~Dc)$ZhK9P=%G_?Wg8tWx>v2`HM{kZp$#@yY z_}`*0AM1|=h_Q(CkHe7Qq;zwElnX?*3j&Jj%inVLJCBYJk=MK)&~jYzNj zHNaO{wAIz*=Q}_QLdTu>bJs0D8K^p0X?^^E`T_crn}BgzBq>Fc#02$`WY(gprn<7$ zoW@)^<$1?zV`kA*rLpBP?c`(Z_~K(rXBA@I!^X7SMuGsPKFK0;4!U5`WLAer-K@`J zy8@%R)CTD~B)FuGS;e2AWV+eF-kzYw60s87U4DTcm!d=;_UPTBWf7Q z*=+B^d&Ae_C^1N%U15_Lboiyr0Cc8MZK~#P{$3;zY1YN`%i5-}2xNe9EysobJRK5fB~0Xg`1L<5pz9*^TM5xlU1*IWOV0>+ zgkuQ~`M)}MmXo7Z8gGm$D5I&s##TEg05GxUDjw*uR;hdLx263;{C;De}Vd+ zYzGKEGsK|dMlC8Td-gepp3pPV{!ws9qIT5dP}lR9#K|I^`~N_9GXaL=mHvRN4&rqITI$u2kSMV4B6p4@FoBiz zvLTJ?q!>a72bSmG5ASMitGUP#Xgu29uE*`S0kq*lw@dqnB;e0y;|q2e#DZ=1Pjbm} zlCgQ!H@`C4{it!mZCm%xmVE(ADxOQ|;}~%`Uu94*d|9)xgqk>kKY4$D$gIlI2B8cp zG0^)(r#OYmU_3D$m{a`yA7j5G*CLG`YtKRizuJiEa1jCv8g`nqqOGA1yy#~qDJ|UA zSM?;%hfA#)l`v#>qg)0)RE8H*HQQ$(&|1gFeTH8K$6NaCrCa)DNShTjtDE{I>|@*G zDn4@X*EDZ0c2Z=kY(XzXNTB2^=bEVb$=ark5|VpNdLZ{(uw zp|rfnYhxg>6Z<1%XcybS=M;%kmc5YvyA0IR>=1x#olzt}RFSuLlWrZD&H|%9Z)R5C zQG?TnGrZ0^Z=DLT5sipa&lP=L_S(C)wA<9=PzjsUS8f5NKhgt|W*uG^Ct&n?^loL2(+mj6sVdr>jnZ*@sPmnE zRMa1TYjWD&a;1tk9oRRqAFd&+RPX9qThEsfGM)|w$;iCSKO_aZu1_U98I=3* z2{PRQh1U*g+w-bfE588x(QQs{?Za|tdNM!j;PP^`FlP1A&(p~q^&T4v7}k!jR~zo~ zyTSFnWfBE`+MZ;rL8~Z1mZI`+X_ThEx_1dY0Ldw+yn4pvGf6u`%n&QQ3yX|*k;j{C zP2zO3IC>$Y_EQ|_24fIoUx%lFa`znbCoE)24m!B-H{mm_Tg4w5HuUEhx7<+T={9?U zFjM+d8fPhUuLa&G416X?N&VP(^yHY0;|L^ieaLw01BsAO`PQPFHD($R9A;C-gfy76 zc|f%GIzg$;4cqT-ippUTxV1SSn@E0N4Pf_X{<$*#obM#Z3vpMYhr+c9HYFS3nx-5O zmxcG2tEO{aID}e>RGkGNiq=IhFh^{*b{<14b&Q^(sD9(8nR_;x{LH{9frawtI_QGdKpP$P8uw%wxM_2u^=2c7dqL6*Z`ED5&p9@W|_H%;pSXoO< zH1aG&9Jqwi1fYolIeB$9^WoEgq?%Rv^$L+r>h2g5KC(nk-2&QU<;vqFLta=|^ok?T ztAJP|v7_&>xNw@PEm^RlO9uKUUdyLMSiKjQa#EUZvV0k{jCjrwrjBrigmUnZ&h&MY z(Njk^M+XX_8l>Ez4)HvVNkV61C)uwTbn0}*4WTm-P~F2j-as2cs>~H~e5N>A)M^K+ zL#1^M5l$sIFiZUHmcu35@5ZO^&1YQ~RVdMZPb7a|*mwdmv?i(lt|HLTxHNLGY`=6q`u4aAj8A%(fvF&n?y;pH& zYR1eof7ezxbi#P#OO=VE$7sgB@2&B}T;#051VgOH(Pl%5)!s_)z_|Z_2@YQ3o|O(c zLzAuppd|u?qKL1mqU;n8Nyg;4hF+}t`dBI&AV+sqduD0DFCc50A^6#G4Mx0;MgJ~N zhczful0tmQ!)n;}OG#n^LS0hjr?FFZ6&x*$Yc^ZxpmVBJ-=Ki+yapm%!)U&s*`F;EI5_jwyD^R2UcW8<}w^sBo@ zK5la=X)w1FCs%u6b~E0QSl~;nbtAUPA4n0WXZD6Q$p{K~^1pWq)-&!eH`MT<$`&a4 zZD&q#BD_^DmC<29s>}a23ryD*71JLyVH}mwCM6m1e>(1O+GXW-=4s(}T@HgXyYGXdSGi?d>hX?e?!wX&l*9m}VF~73 zFPIfEKnutxFT6P`9o^h6FHc1e;n{@c&?4yl9zf|r0tdt*gfN;Qj2NUyZ_@=f*ly{! zIq6_)&pFML0eD4C<3sk?k%CJg!I}Ch(rHLNwf4l+E!E=rYrADHw z9yQ(LF)O+O4+@I8?K*ohY9o&;UCYnn{E9w6UAE$1dZE^3lqBcr#5X!0COh}B{phT6 zyM%}u`Xm7M$lJvQ;(6h8x$Dd7$|)$$*H&r&N_|eNl$*9AynR}Ya^C$X15I)|5O)=K z|EOT=o7rxl;}xn#=j7tDx3iM>UXQ;72cRwz7Ahk@jR;cJlh+mL`Gma&hIth8Xm3e1x6^*(rKUx2D%k)14L~hJp51_yjeRQXDs#1SuOb4EnU;?v|%~Zd$ za14SD(;D}Hr=-qtzw^BJ0UF6kex`@;hKr=ce_#lz&`)GcQzl*IGrx8R6`yYKU=3(itCQ_j7st$>2IvJpzu1w# z>FVS`YhZR~+>B1odNo1z@f8@x!T3;@zg1MSZbm(<2kVA}FBuzWMRRcshk(U723hj& zIb?Xx)lMVu;Z)bwP}1@TAR*N*(4_Oe)@do zG}2kL>JZcuS@>weAE2`I5`>s5ggBVwbCB2od6~0{{U%;;d4Aqu?FRK<1=AFw#bWkG zmpW2D)JiEc!{6qky|BCU*t`wYJ>*xh8eI$~ee+ulf1rIOEJrl`k@&P&*m7Ozqzf*m zRdr55Z;~lu*DQ=tV>rdMGiFzLMi&da(3(CjjwMU- z5&Yihefa?M`Nr5BZGVS=`L>l)0e?LHESX$69Ez*-cc zsYu2X!$KZC2&kCSCQQ+s$1F0a6ZJU2k)ez(RHFvzNdNPpy@NN$zAA$J9dah;Flm>u z1Y&L78yJ1!vg(m<_oGnn_bT-r;)&HWP`>C7EjaQ!w-&=SMAJWtRw+USMB>Jh5|}+0 z{|^i3!)tgP%vv{#ql=G8lybiLiouwmq1M99j&{ng*I_F>IanoFiG8+a5YroAL2n^lS9pOW@C~nUR zqF&KjJ1n;MZ-k#q-~;hO(y07^poosPrE4C=>7D z;!xAJ#X;KffreTN;iePq;r29@xtW{q(~%**!Q43IH{`q0we83CoBmHJPT2L+^a6Id}o;io*IV3ti9Ohg?i_C8f8XkS}54Z^*D6AU}6)neq{m zTW$iF{T@hk;coAl(%C;ya3BJzoKrWY02*~VfJeEvZHIv`={)I!KG88S0#H0s)%ONw zgQ-Lv_k*3?8ekfWGcT!Dpq6}XD0H{k(J1!Y6^lTXk&2|8gNK;B4?ReFyD~`^J)*Pn z;vD|_>##hdB00Kvz6GZ{)s}HZ6Z}(0WIi8$?wUT2iNZNr0Q3D{!9~yQeNd}iM#@E1 z)?6?6o+h)lluf1OU66L((Bdg5b{6jk?>rwxFabgTb#torLcmLJO{P=~&mfGpyW5=E z^p_Cvf6~qRil6rq{}XQ>+zl`4rjg9H-OA}m&7ME&++U%@j4{z#cdX7otX=E-ic-W2 z-f#7NHx$t)wcU)bV;1yf=Dyu2$xuui0CTuH9*3jKgfwp6!8wetK9lfP?H=o0FL|~~hi2L%p`d#^4udbFhW`jq zLn{Q3Le9U){k*OxTG?tbsJFg#V=k1XE8Yk2>YvxuRC!>2Ujy6yRBgvIWT@Y5m~Ga{ zcYJ6v4=q5MSv3kdZ5c26+2XrkYm#V|KcX&-nyOzGuk{T_`13Hl*pBnGr)4h zM57a%A=t)Nq=Ll!($Xd>)INMuNI%x9dw)~$h=!mzqe$pv>OvO*urRj6|M<%6;6D6F z1!-$mcG9?XPQkLhclV;}h(0>0@2?la`kjV-n{xef z!KraUNfk3TdwAg^_Dz@?SvWu_~I$hmeo||CH{Z^j8 z?=t+jY-AMtA^Z|x4d>!)nEt@=ShL>&ZMiB@E6$z>pKf3Xq#@*n5t#fApw>P=e+w1? z?B7iE$XW41<;n~D>e~#6sd}BwAvpcW_9VBZL{sreiWDK4m+aBoGmh^2i+p^!6ILV#69-cu z*0eFy53J{X_}n^F;f}F}g8U{~oGOt%MO%C%8kIL{?XZ`(cGKow0a`h<_?FvH3XQ+d z1#K!Ou$APxHKvV*hEC6AJDfVh$7eAi!@&Dc&x^0+E@bQ0Dc{sIy6rftz^>i&ww4xK zU53(-?&Z&NTc%L7H~J+Mr7g!hD^_x)aturKI5JfqUuuGRaP)&Xv1{31%Ih<~OZeC+ zJjB{${X5P{VDvV?7G0;9?;FD39;Zpe;{OO6NdUb<#Ps+)-1T9#2EynIUeIu@n~kky z-1xzLUYHdouLm3gSaPzZ;5Y8qAFczKwjDuZY024{`-F5jiBg_fLaRHUk4yDVSphbC zMOeuG>=*rUjI=B&@`;OsNLHVoM$c3N&B4&3LrThG&yUr)nD_pNEF8d!GzsGsi9@frt_t=>wxcXgq{J$NlDB5 zs(m{qL$Co5{U3V8@L!)ms32Ro32aPda#h~wLIFGH>l61T$UW)R{9(%$6|l&Oohh%A zPYzv5!rn%fjMK5l*E1jP8TH^52z)(}$z_Y(N5wDbjqY`8AN*29Lh5JRS z!4Tx=|3~I9xk2l7-Po<}#2W?Ok8SMHP)}sTQq>$RHH}xLsVh1vxv}3BS*pk{%`km` z%GfZ|IDZAX?J>1iRn|j*c;Qp`?R<+hE*RalUZv9JQ+-E8p=L&d6>%QHyyKb=JgTp| z)=>b}L$@LwNR@VKrXD?Brp{Ds)m}4x@9SaQ z={lb#`S1uP21ZSqc+u}SqNZp-!+v9W8+bh0N;yv5@Bg9FtSI0a^EZN%-KT~F7$bAo z;sKaD#`HB+y*ua`p{*`w)Ij|#;hki3hR5hJN(S!%NkSgGMH%lnWco$k%yH`T)9N;~ zwY4=xN4qR~PngOC@yR|z`ESem8YQX+Y=0k7HE9=_URfxllhpcFsH~$Ka@kQeDfIY+ zAGs^wp7_Ne5-GVTZ&N+y=Lz~!pJeDRUgeT!cK{&#KOGCR1_sPNb|sVAG6mRXjf9>i z7g3s~Y)=RA0_y6nB(*p3$iKgZW;|zrNoJ>$hgM7sggNv*x7iKsFvjG?gI?`jO_6gn zV?a+ zKJao9-!iXcnc8N`?N#p)t%Y{!J z*vcOX2?%QilSG9qVp4o7+en<*wKeKORdiP_ng)Ztxio*sszs-9zr)c_TdqHvWklIh zm<1<_=O}LtB^mXWiBlM|BqhGmEsK+-!J&&Ur!{dO#>a6C)9rG*3Nu`6deg$#rnGsy zFJT)dqvMs>lFDu<0O%1Z!a&$Xz#oTLxJ=2EbV{E^SMN`^p~LBdw5-1U;Pk&)aRI2r zfVi=HXX;mE?R)mo!fA1@e7f6V-JT4esEj=_8Z{yu@xyv??a$)ud_h6prP02@4Om^NKOXRb zur|t>#qu($0<-pwKxl=%E5MchKl$)9i0 z*N0E?c zn9VAW@fBCdA49B&{9Hgw>R`2m6F&svti#s*Sh!=)KI(RMqfc7Csa}_dJ3Y(@Oha+# z!KW*T9PA%vE-SMOKv-FrS`zfoy=w~i@#BoHl5MUUfnuoI?HYYB{CBg2nXp+UXqz8x z0nJb|a729Wlix*y6!MkdxVFba2crjkPnnI~fA1tOU?%b5rLKtR)1-+Dx&-X*cVpwK zbn(U2&47XB&hA;cN~7n}Uf^?E;`f<$Ye`&?K^cQ_h7#wfnJ1Yx6 zUtBp0d9y8c4-b!v)QqBo6##hnK*)1px~D1v>a*isFIWEAvNc5=RLycj84B-`02;_<6-}acMuvIg$ z@p%W9%$c-!p9Xxq0L7k32?Qg^DMU_x_)3(jJ<6F57Vz`^xHkppOScd3x7Ms`v4{a< zETHK!=#3(@Sq0%B1Ep=vFC$tSap%0}U#u2%b=qz(acIhlrXo}~zQ_|wnU8wBb>PMc zmbpYHLun_)_L>!r>BznN{d3^~QUyAO1Jy4$4V(6X`MV*3s`8|>f5Ddk^1J@c@HWZI zAW>yms}`mA@RzT8?zXIqRb?G4Jk-Q#Zq|?XCZ?t)rY2-^lnY6LUK_YfJf{`~=pz3hZI3P&AHV}hGHG`BEN$E5)Lv%KoKywnCPEc;6s{ANEEYxl zJ$5C|SK;=T5e4X4kA@_T;&4DA)D#W`@uUsXqhg>SBO$ZY15#Y@01rm|<&^ZN-ugol zy(szNvCdSs@gN&9;|PGLFDwRgGj*#q9?B2ftUL!*?e^Bg_23g98~|4Ts4`yOmg>>1 zNpm%je;2{cjExr{K>{q_go~n57boMYOiT(}qbnQ(nI<^9x)kM2k!;UA$)m_R+^L## zOB3)>lgX;oN#4R`8k2=;panD~eYNSS?%`64e8}?u69w!YZ=><7@2;jNarkSxoy~BW=!WvO|FHL z7_CTsn&H|dyb4rqsHMa(SvvXV*QEurMXHoADRhi5jz% zIAY+C-f?n!glP^Di}DS^786pBBEm1GM3n;mb`x$@4gGjcrM2ySQ^y1Jl=?meV35(l zKHd<=E?!EOJfn?UsqPnR9W7mW#-8GoW;mz(WM>o`2ayJQz^VqXAr+nBzgiVpYXaI& zGn6~NDIzvEVoKrap2G`y)o?gRv~oN-J7=Nq`#MT8wOo(VOjyUuOdkA&eLe1%7U*@` z9igeLMv~&ehpXk#m6mryR0%Ap`Z|Jubn`x`kcBf6jEoBI$O2eRsqc-HNw%ES7~7I573&HT)y;TQsGHLy(<8w7?+%kk@u5@ zseNIS0mAdxnt;Hsq>F@s%$P(q?;v(pMAZOzKO>_KDno+Jat(#5|k0G8M$cEb;52dvz{ZxLnFp<#0IY_5zt+U#?i; za!RwqJ2MAykwNu6d8UhQWQZt892SdH6ANQgXUFA_PG$<6w=beb-rpI0y;}JeaX}3n zfDqC`U&<)2&&Usmhn})}k94o=HMguc>*7pxuk$qv^FK{$fVwxDd7BZi#o*0z#Dm~~ z&is5*>AN9n@DEI)%j@V?s(W7+?f5tr8Ln*er7=`ABx`G1VBj2;K*Hdr1f}VduOJnq z>+9-~kJN*At0CrSqdGVR2ZQA2|Hs%n2WJws|CYN z+qUiPdB6Ma*6we2YyV1BSEZhQp6)(<&VBCBbzQ6H%7{on@`eec$8IzTvJVe~;AW9q zf|$tl7G(|dtJ4+;)55?ZkV-R&YB+0Af0vMi$s_MNzB}(P_Yw9c$&VA$oUCN5(eQ8I=!< zKC%>!?tHl`WA)AGq4dk@o??lTs>hABbAxoHPI^$?B$-QJ`m~@51+i0Ud^MVR;3kup$JZxiRG5Z&7YzfE< zrqn@{#^v$0Lzpt5eY^GkxKMVi;GatWu_DZtF);z=KxV=%(*mKAB3b@$eZy#qM})V& z+>Zo%#cW!t={R@T$aw|egc#)FO-*OVm<9f&6@+35A;hGU^s-^{8PV&lJi=v@ph_^Y z8Ex#VzLr4+I%Rci|D*n(C#pQZIxnx6}gskh)=cLB8$`h08L7f`R(qUp=kkBfjoVcBb-pDE@xi*Z)02 zW3Fp4I6AwYS6aU6cp6A>Fqt8#B~mk)5mW;B=&p~ULd??za1hw|&@D22@LmYfSAF2- z-dgc|8ycL=Ka}wQ{aqDO7jbabF^kkQaf|pC)KykBhPl~#j`*6hCkXMzpNfe`pl9KB zX5i>1mMBd6tHC)^;!sR3?b-TsIx)j#Xvyr-M<3Yl5cnP+AM?BUd@%Eqk&|`$?SjJW zyp7I0wMk?jA>$%39dP^nYhWx25zvJOy0*UZv_^|YwObyv<6-f-B%Qh|cquy?%|=dQ ze!fm?6(8*|N$H94OjiQD2aZ2a!sQLIM*sT${mbs^_MCT4{-)sbQFHEu1gWyJG$1c> zwoGqz1oAuV0{MD_)VetY$K_Q!nF{>CXJdukK!nBT6`A=A3`LbJArr=CnV+jRFiCo;F_l zHE+HD3T7+&=IFUEnC$-Ic0F+7C+YqD&`cHh92l+Apay8N3DN#F&?fm=dbzw0En(?i;@8#~ff)=bkG;B`i zHe3r50S^ZH78Vhn;Xs1@rW z6>a@t5=I)@+WyB4hK&>wYQfqy4mQr7JX}x<2c*0FJntJZVr1KwpGg*B=lp*E8V>`B zLNjhF=CIf`18sGR<#AIrZILSM`Rpc74@Pm;g_z?cRdnplWwQKLv9iu!79|^DHBrsu zS2sfDg;R(BT!qV1t8m^nM_r)YYJi`saPob7YgpHzwY>|!LL|cDxuAFESNrCt$!};+ zjaS6@!Z{i-Wx=orV`a#sE@!7h^k;r!dKe4(b!BiB{@`)pq?(|t<=L#pcvFu&_W1A= zg8;{I-eR1~|9k#O$x7LnvKZ7W398=j=$hZc%fElq)x{4RDi(*2>ZP8Y|1Z~R{#$l> zXwjIJmr7))7#Mn=CLH( z5rdFVCDroWiB&d0X40a)E<3&*-LowgmaSK0s1PFiD_@L`1{JP}3=$*0LWiou9rA0k zjY1)=<1#?-duspLDGu}Yzr27rFyXC4mQxDuS9BioXYw_gybt$F%xNyPrC4vxZ7r7` zvz|_phxW7^Znk7#BmncsC8r5L_zet4^$rN#9{8#|`^WT{VFYLA(pD5Mdr!$g(==Nc z2L6#)t1{&7N7=qm?hMNUb>ouG)URd;RFrWibcta{gVE-Y@o zH(N<@!p6m40$!8*PIwva&JKK#oGg}=)qBWE7zxWOJC=X4_+q>7?yuX}EdG0R$L$i! zdR#5h_!bsu0?Sh8usZ=aw}d%=?gkhj(@IErH2{atyR!r3K z!vIa%FK4FrcWpxX&-Uj@FNXub0rQ&aDMiHRG;(%2{(3cf={1q$lzY*UTMOrIZZUJV zzpys*vZ6^OLLuw?kpFqlZ80+iUwYwH6E;W@h>bNuLl@5HOMGDCX#2;;c1kOq!2VG- zCDS9SxprY~xyNlV%u3>|D?3(#298wsvMV60+C?sBZ0(d{;R%NZb#?Jp^;^T^E-<@0r~*xn*`mxw%P;&9ZxJ1G0&>=l76x z34v)QZx=72BmV1ia6eqg$ei0^n&*Ij+&` z_BcP~r9>fzq@odxqa$As)SRlm;B$XFPTXkzzg?Eey)-8$hYNGHu$C9m06`nxPJjRM zTt5$IlPZEl^BO9V2~1J&^Yi9|)FxREcAIgQas*P{St@F`kN5MQ=dV#bbuYt*+SZpx z;IUB)o^D%L*FXwmMBE~!WWOUQ1A=aN>3i<|qdlvsN#J?wgG9dK@8Id>VJ_za8Hzcf}?xE=_&J9>B#ppJ&y6O# zNdf&*C1YEF`{((opDJM;h0j-eIRz6OA95_H5z)m(7yQgC=D|M@ZAb_THcmu1tQ5QEg@%r>unyI>3KLaGv zy4!Goq&la|3oQ#mpbo5r{3_dN8XQ~ z(#wmbc0N|Bjox+3M=vNHkJDVWjVIzq_iZB0#>)4d*YC&0!1TPb^ZmLS&A99B{E=_> zwsp`jVu8+O(V13RgFW>om_JjKS*?G2JiCW@v&L|J{P$ns&TO>X-JOu z(`r1I;qCH$vcYl_jSv%mtMbQ%9`ML^2L%oklzUyi0Cd!&qCbpYpSzVMCFZ-kEKsm* zcPnn70#0#`)!!&hI$p0AXKF&{k+|>gAMwZ|h`^pL(!fClM6v14v5bvensBMjvuUVe z#GCURrKjki4XTsK)&v=FL!lwl$80+r9_Zz5@#M^^z+-+2(pSqb4`INvHTU_3s>?89 z8=%s}k93is@1p1dEDJ)OgRJZ%Ru5A9S1>U5Vr8LpuDvM1iZ86f(#lQMnE;MSeq~TN z$Ss8$X?#_&NV!O!y2MO6LjbN}A`+3&;`dBLO-rOip;%x*Q_9Ldo+4Cv1VBHX%j3}3 z#4;|7CjLxVc$m`dRr#T4n@%v#=}DZ8=1SnIp^V;|h&ICbJQrh2VIl`FjhR$(#nXV$xl=t@Wnsd2+g! zwYOfoj^`V^)kTK~1h(&v?(>Kn)>wLshsEIzL~W+0Ke73VnBjJJc*(o*G`IFa)Vg>bnoUA&uZ0*^) z=v_m|i?-do>AN+466RP|1qOm!KA*4d*aZO%P6?V9uHs~?N)>w3RzN;Cg*E! zub{7V3#)Z%MvA!c6uZS+7-Ro+><@W{I|s9sYP99e_qOT0zm!~uZ<$_~q2Y|@jE7nu z2jyIXFF%#QHYz?XX(&UaR|LuNe>kozE&?kl3H5-WR&zD1O?y#{7)U6H zG)@mTj;T&y9$@(kEUDKS3%=gPxv4)gG!z=i()@JFkqw=JR6`-6EgO` z)5?c09(I3u?X7OEkFUWBKwPjGmtMBH^fZlq@zQaIls*{GI5^%$MJEE2!3Uu7u{f;! z4F?23SkT__rp4Je8}0v?GKv+@8TIqKaj{rlw?Bq88t$uno-LUh4}Ld=OP3Q|h506} zx3SPRxo2@K&6%k0s#dSPwANRDj2;iX9(^74=Lu+x7}{`Lx7atG)Ay|+G$YVQ_*s_( zu)ZK1wL?W7eQ5os&l-W<{=Ce#i3ukQCR-{W>k%QOg9QtBWjsrM>iJ7(I3ZDiEFndL zxc#kUm&?nM!TS~viy1%QYy37a$jN1n`FdpZ=ckmUV%rDQq8jSI5(bJo4iz4oRRE`o z*KEWTu~)J*;(Ye?ZB}h0Je+EYGC43SL&`###h@wB zc)+;cVd2rnoi#q4Se_V^n(LRI9B%8#l&&C|Kcm@NGmvL#0;r`)Pfy#$#QaD0YC1p> zZXQ+8PC6_AqE`06+33RNARHw8m_YzABO#|r!#|f<>2ZTv?LaM+r|dQ^F(3zKp?k(zH7z7$CR#J`w->fgzRP0}*fg0C6n|@U2qfUnD75 zAVaWFZd}ZuJ7-J42irT@*q&7fM1DT|{=Kt_Bi*IQ!KL2iP}h1btW79!;d@aNaYJGS`ffakJAGQ?eBP-6G+Hz>4u!5n1%a z63cmYG6TvPyN~6rKts2~D&bE6TRb(-5IM0Ix1a6VlW2?=X_mxg=4KkmI}cb>s?h$h+9+78+RNnKBf>m9J29Ji zSetJDZmO?Ni{{5I?~%#X!0vL!606VAVQF(k} zffOdicHGcVCY-Gpa2K;Q(qo4&W^Dbb8{6>BIBK=^^#uYvxo(`#fsu^7zar`}!_L{s z;)N{s^?oRCre{{{?|=;Jv3%EM3H?ZfOr|bV^*NmkK?JLjFhAv%SYOHpS!YXKw5ah@ zkZ4jJ-RNY4o$WmgWBWxh$7_<4cwTL3tHkP>{wrwC-(Txm(kn(pE9u-5cW#}Opz5(Q z8SUezXC{;kz6>LIjg~U^mJtrq!#L!Yr==r%Os0Pf$|P1xcDQk4(Wb;yldyb%v+?N3 z`K2XuY2|qFw2`z|P1|6K!r^w;`7}mFtJF#r;=jIsIN4_`%XDn1rm3l~Vrp-eAmP&K z3mum@1o%jKYjScp5_=u)U|8Naq$V@|TqE9GU4J*#bUyi`EA89v7b~%v*8ACC5XG#H zJ7iens}ux$edgmT&8|w0Ode_v-(lw3u`qspOGEZbnw+SzqGoyFe1&(RTt6_Y$zsLVqpTn=wJPZ`kr@*4N!{e#uyr z9Q#&hw`h@LLWm8f+H0z4@aKOA?Io325ezumJ3imGbWPXaPX4;lJze2p5P*XsU#h$; z_K+8zs#i0D7A9=yQV5)pv_^u&YC@ofrSDJT`{)OKB11$o|rgXK={W zI=UZDGyS8RvxAd)mfgp_J_^@}krU*WtfY*t+@s2cD#h|?e4dP^ZO0m4sQW_S&YHp{ zQiSAGBz*^nW)Tft!3TJnv8mzWLo@AJom7g3q2;aqEl+X81 z_1!>6vYBc+e!!=nVy_LVfnekq^CyM19y6P;k|HOXUFvFpPY`aTN3#ZqGG|MB!z!rZ z-nkD0+KPPVPqr#s#1j#dF#+&le8`ey5uS5t5JgwNmPT8U_5hPH7N7Ur6Za z$ysLjjAj(URtI*N3mX=vup_T`WBvZZt3YBDI%06vOFaGBO_aHYWiH!-efUs4#bG!t z%CsLv6=UcfmzlJ9rd>B~t0^_QDMwmrzBAjW#Hfkw^oqOSilDM2Xx!0G_*KapB|Ycy zw)i-kDC3j`WI&E#IBV5b)#m0Mo!_~H=Y+8kzj-VRLHfXIoFY}Y1+h`j4-Qh9P7pvg zoU?utWA~D6go_A9h`?^_>S}m+o33>`%~pwK<5}n1s4{flUTT1&|0StleBi*$?TZjE z;KH>y??M)`YG$<7Jl5S?@?S#P~t^7rPS zY{Fs3SvnE+&U)=P>hmwaJDD?^AQ-E)_GMtRG)k}z*E_6wn#v>wwbj0T!aHnv!E=0_ z{J50~bZQCRWZXX3f3RwAa91jhD`fM8C(Sx5%5Xds!XMO5VF*xm-+4q*tjs(px|nFY zRv<4-46RCpUb}*>cUo0jns)y~5X@f?1V>@GZRSVmz^X!^@kwZ@Z1Gc>|1R$vWCJm1 zq0^jva->Z%On0#oyakQyC6&E}LU2Gb9J#9)?t=^Lqh;AcaI6#C9SLZr@l&LN{fTha zqAF{aB6q!l5-#I6%U#vA-iFKh!($YX$WXrPghB*i{xNeXlqCG`!|}PYIuDG~t>fe- z<{Whw1d9b3W^8Jzi{;>mwelUTaD8qWG2P!AFFllY9TS)!183Bu}0 zqbV=TGHqX(pq##{n zvL@v6iU%D^ZKzS8V^QD(49d-TI^E{qsX&`QJvWbH3y#V%n{Ifa9yd}L>R-s>AbDfw zK`GfT4>|5<+&lHHWC*>C& z^cQ~W!&3>C!J5ceQ57kH7pxMMuxgLeA*wyN&Ae(xYVTxKKp77B@^zEsX5*yAZJ+ zNXeU|h!tf+?_ECU4}2vQ*1aj0!sn4u4#w%&o#T#x##RkZ6!xaF^yBn3Tr6E>z<`N- zztKKGm`y7pEqXT%*TzNu6~OVs_AlO|a=?G2#G^~Y?WZK4|<0S z)LRYmO_o){?d}l$1TS8n1y&9}t69uQ8dJ>A!^@AF$YmIi77e zf2ypFee9;t0dlEnd}3dHfS!oXw~qPw`Q}3t40biFWNFXOuaoaBHm3k^n%DgiV~W80 z$J39;7R`x$3~y8rcfi*n1H^JoO~_p*CL)omk$9g0I;T-VAqOWX5VYsJ>67C7ta&cA zUOeZsKU+vm#E6gc2{c>?AKrYwTLq|lsi~SI4Yx*es~zS<+@BAxnI7-&feH#JkL4}# zqPajo-ogIn!fS82^K<>Sdr-%(k-5OMFJutwt;us&=y7u%jU{M2L7Xg#=a#x}xqrF1 zyZf75Y)zXhsUU0?XbhYrd=JKnnwvlL;F5F*2&=ksX*_eEXV zPD_BDYa44aI8gZi8bJe)9|*#gl+j_QdSban@@E5;l*#<;Ltz8XsHmB6_D~~?IF=kd z9|P~cJw}YAz_hDYgi)-1*aB-hl|!e>RQpxCYJKB)!jILj263LB0`wR3JT(p{=?o$T zau9NFVutc}xN=ikCX~F)#|MMGN))%LD}`(KIN^auWuZ~;_RgPPW>$Ucqe?ws_(+F! zgMs%Y_a|_2Gs$UV5RIH1ZY=Q!O^+93i)lPZXLu>RucA)}&N3?Wo_a40Q>};+$!RPu z*};qC81^_U8L*Gml1UBRR&Q$yC4!u>{SLO5=@_RqR?gTpIn=M-xrGd2Za-A11K!>) zbP6`^6_pRdb3E|cd(rM+k)|@}`I^l~&L_pfGqjo>+4+WGNA}$hSQqP*_vD(c^*(`E zM$pGy1Wq}TiIjSUH0fB&g_YCi)rlQcTMyd3<>>^GJ{O1anC5V`odrGLCE=X8H*`x} z#G5>uS0>|c(rHKpKcIWEKINM(ANQIY2O?6}-M49DEh{&j zeL*5_TNk4`k3){WGmpq!*gqglU-I#zF?&r`&Z>1{@)#LyR5(QcEZGQEGZ9wJ!>Qlh4{JGLUr3T_}TNV|!ZFyXT8f80~$luJD0aHVSIsr!=xoH*TH7BTQ2&(>)x z#<_l99>nq?&fv;?kZn^&y$WtmAO)y0JgPV1R=LP@r{+P5IT6% z+-hgh;W#8*GoO(+e9)eZPO4L9?+T{vY+mVSSKh>w^qZQVMWtXsu4C;PWkUC9@BB7C z9sFg8*l+kaUtX!Sp7e?%n7_YxePTnPU6>z)^lEgjRmZ0i)Qb4Wiv}68Pf0Bl`R0qX z39!M^-ue1KkHCpX&3QUPvG$bZrOYHe37q|BS+rCw=KApt0d&nJ&Vo5vCEI0Hd#Tz> z8U}5Jhq*|HfH91H*_P(X-8ZJ{sh{9kU!q1*VmVBCJDWxGTydDE#Xfl2K1pR^cJV~r?lAPwdnZXOo(Dy0O6Q}F|0vU&A3i3*K)S4W5 zP28i?q?J;sr*eedg!MxLHdsfJQEtr=E7;g+n+O@+Csny0Tq2i<640 z<14Y1^hjO*&V?*Y=j`xk9CUc*thx@Q7cS)-{|0j+544U5U9fj4`)HQnT0IE0@Dp_w zS&%1}GAR!*n=u@0kZHaR2)-+h&g{sYxvvFUy21oQ@qQ8Su_kK0 zBYf-%K1uV?MrkJxo5x7=oN?_2fQ{`mKbxhKCW*WIqV?l67>!gMg zl_zT0&)0DpCJ~)5G8B7dgUfW=)!J+-w8_uMQZEZ@6q7Q4H6)DR!1C=lrqja>DZ)gU zpPaDviJrYPI%Q1=G8e+(Fv>PtU3tx`(&1&zq4z=V4PiR_BMza@3Y|dD3qC1Y}6@Kp< zcdD?}Nk;BFy0+lTvN+t`1@Q}@e4zu&r0m7Xez@qELiZl<(7!g_-4?DY=XFEIHJeJ2 z&M@a7GrT;281Ig*JGP7um`20ITk@rWUZh~EFU=m)HNa4WGA$d~fZ8RS>NUP2Wb{vq zvA^ZV0*j!=KF_`*{APD|by-B^Q{nLI!)D0RkDq`WjQ^Zeyr`15b#s|3iE#w>NWeub zZ|;ETHi|&sX-lbii8_(=T69msj^D$T6Qu+MNO6K zqGI+FO@YNY%R?<2SN6KSmQ`GM&M#Bt`7_7J^w~Vzle$^ht|3#UKJ+wqJ6YEJ$2@Lp z04D1_lT=%YRd{S;ew3qnYU4hN0ImU&PEAJC!pK|I9ge8_HcSXWwnK7_?OSfVpMb?}DjC^;Q>Qy{02aHf7)ciN z_Mchfbcvx^rTT*4xHMd5Qh>e0_Rn{06rT)H&3n12+n}hCjrmo|A0LJkPA~li-Z|Y| zJ%3EY+k`Z{bmV=_fSK|#|DRV;Qt!~?fv6O>U-~>!dJuqx!;!sX+aen;bCln;YI6-|P04Ml2%d%4Wn*u- z5Zr~GTXt2!eXAor64y|Yqo9;RMR}h51%pel6<%xVt6w1JcM;GdV(J6#wxv~(ls%rCeZ9(;=lxRUHKrh7{e z0}ZT)h{x2zn@7`u4Y(*vSbsV5+iQr8epkYxXw$@L;1al+aHA`c3ww9_j>L8El*CC= z!rWVKe~r0XArU@muWd#gz#uJhYQ-((*E5y`2MtBCfC(m2i*Mi5z4M)N$M6hr^Lj*- z3zS>u^DI;N?EzE->>m(KX*tn&mj8gJq^CMz1bEJw5_Ppz&6hN@Q;51ec&UO5f&EFaaa)#aCC*j-)6#AIS2f4DsokUFv~A@ zAn?-TYVeQWWCye&ZmUwFDitdu7Ss8MGAKX4x-PG(S7q0sSf2m7u$owCoh<_z3jT|; z7nJ$aY+w`#^!H??8K$JXgAiCW7jgYQ=So(tl*wUGBH=pZ2+9!UE~S8V;n^O2 zWa?#+&26~lYDpNe$kYf+#)piF8p0fA#zTk%Qm_PTLjW&!_!WRlVoh4h2CIW17{AXY zr~L!m?&9QRswDCJh10qr$i#`EVGq{8dTzMZ+NcV?UyORMTMYzZGig`~A*I3JF+{jK zyIhgg?rmo^A{QJN#AJl)H4vgunytaIoVJM5X^Dr7mu$H217&J8NZXLV=jS6a+9kou zmvL6C9%kbfJk}JLb79wzEM`*k3>!a93Q%`m28RV$^2I*~DO#l9^>B6Gz;|XoIs*MI zAa>ndPEE~YxG;{Mn+^(Ie!oxQB$&(1Z5L@1$9Xam8g*{a43Q_xTJ4O-1~jfF7%n*UQKTFwyK@c{oh&uD1}^aV519) zH_Dc;2i`YSDzb#>RwpR&R+s*uMnUpEX$?tcY6O08$;daEL(Xr~ts5MYZ3QK;*o=<| zFcPc^cir+{h7$slRsLIj9m2#|oSp+xz0l_ti6uE}L*HxPd!(VohqL+mJ%YUzX+Q;e z`Ai3F-*FH)_fS!m1id(nZkYVO2?8T@DB_32RMIfBS`xBPL*Pv;SC%{ z^mu-UC>JZQtlCI4?Zf%gVhVYEnvNbH?E(G%No!3L+_nKZMR`mlY`#^5#pwS07rJty z;4J~9oDrf{sej}peb;_nui5Ko;eEl`Kadm!e_HP;IA|DRETtGnfX ze2&#zJH5wYSF} z%1UmKLEI!stZTFTv8QT(fDtz!9PpQt1|3#}UEKvM?AuhNF9+H}FP43+ zI<4)grNk%~w1t3z%Wo|*Jsw;aHOlkz;UO*->a1@Yv`&#id4hRVleq7w5`DGiMgALvX{?Y zX2AjqGg%^jNTokv`foR9YJz=J@AvAw?pVJ{&?glw2*y|_&M_1fMp8^BN}c{Hb7f>o zP_U?oAKcCi&_Je;DSX+3-a7{%6S|6afq$cT>uXs(^jl{?aH0~wOXLY)etc*m-*kD>P-`*yGNcevg zkIWPkMC=XrVq!Th~tM<*FX1?B;ayl$vvOX zTL^FKb=))4etdNq8w1c@s^qa~?>$wT3L$QP;P?40L3-O&!RjH_{C26mfg?pic-?=X zR!F}0bcE_H2KVrAK(1_mgH-BP__a8-F)eaOvo1JYTzkmX;@tP;Psfq3^oAVI_u8bf zWoB0f`PgF`VwOI+z$`=l}*yl``HQa z!+E>fZJ1z2AA{WP0MOiZJg@c2B0lK6J-Go4<-D?Ka3)bDXDz(*su^;c7}(&`paywLj&D<<8=!we$6|n5)IS**%8b!^;1vX5@aD zGGk0*(F<=(9Gu=Qba4m4-e|aS?ZMSp)VxFiCn8sbd zi!+7v!HS@AMvTmac*lqAU;7g~t?2)D8>9QHUfu?$T#|8E4z0FCceV#3Z5;RQMwVm= zcqK+bUpltJ~mDs~|VSjC-%8HJWG|+Hqgy%tGy_qo5 z=KeZ6(&y-SBarD?ZCgE1F1pbwk{IMmYvTq}tXv@P+a?8b>H}T7^fxR%J3i$61hs3m z*;%@b)hfGY_ckEfV6^w7IdOQ8_y)B&9Kacf!-JadgiA|pSR{H&7@PFgS9tq=wzfR& zm2fv}QTY%X!lK?Fg2H{;S^Rb4wAmLNX3Wj{KD)6YG8>1nuy9H3ED*g%!)<*+9W$hC zhJkK_X%y)xm^Gqboz-aI^6vR#8<5$jK&I&tM8~ zb(g7UZEhF`+1@AF z&-6<*btsyKT$NM>jT+*Y1Zl1TQ?f9vk9z}KHFZ9DwY;u&c*)5ObBkNagM@yghFx+2 zNM0K@4$o~zM(11J!MG#_HH7^P{1}5a75eN!B2(x@-ZZ7MIkRL%v|mc(ni@$Wl|hOs z)_l)oM03>rv?zhvQ5F^l=SppX`6LdZ|lfAJIrF_X@Wl9E#8bg(g1udnf@86VR=X(y_q|vFrndmYk?7cX&KsfMFwtX>^R`T8ErI zYiwBMmT{Gg0IQIVXyrd$x+}(;pC|j<32Hxa2~nF~5)88-p3Yu33uJ}>d_*8rhV%aW zVum)DknvSgVe2Unga_n?!O>aeT#r5@=l^f+Re#62?XXNw2C7oqx<*Zh(V49;onH$l zFwqm^)#d}iU)J4L5sZG{ziFCp-}C)1>Q%X3X0*Y`4yy^}rss=9I^@H%HNk9g`0G!% z#gCT2gC~WU$IXs5F+SV7x#jjC*{;N;g$8fD%<=N5I);i6WB)p6Ea`p4`TJV_+#ARedo2y;m zp*pYh^vy7;#M4>kfc*uCCBh;fVcIUy_PFvpzq_{qfEbI~k^LGVB@1&3(vFHQ325#7 z?@ctXz!T>jYqZnb@mJ@GvV9hXr|& zFX;P_L7eJ_`W~eIS+j*276s~872>KZ+h1w;z#k*L~UPS7&4$a7A%<>$pETD z=t3pY$>i(vt6R(;xbz3Bnj6Fvlqt>Sn3czLhND1g?_sj9m*d{_#J`KZ%QOkouwL95}mz$j`fS<7_S7G=RgNz3c@`uw+Mq-EfM5J}*i$wBa-?HJ7gK!vX85w$vO>BtHq|{;6pVZwtMyC*br1J|e~~|Kp||6gGn#WB;hP>mC~>YP;#X z3(+qz#|tJw(xKIMbA>Wve}NhQ`B!?{*hsPds{&{;cujg$#9Pnb!Ay_yph`ab7G-l_ zm!i43+1mVO8K{l2}Isw$GQKH#TDdSRMOoZPl_vDl(l7t(Qo)*6 zBM|fO4KjgzeSLX#^?8xU8qR1+HVAhl7XhTfvWXzo5Gr>SU}8vweENVy z%2ce-p{pyPuvJq^bFdkxNhL6Vs>q5Z8fhWUtg5+_8|5FDG79XIqlPKf$KWT%%;cJY zr(?p0^vVDVu7Xad^A#@^CKgJC)J7qEF+^ikaa5l>BEZt=p}x;*nl}@6dNfphjKA=I zF}K zxhF1qD>XZ@5B!Rvxzg`9UqDW9kwxaXw2vCd)dyA|u)TydAl>jK6;mXt$k(O{TOsp0 zxP)Gz*@VRJUIl&wjY;uljT*K;Ilo9i=d%W-jBYH5XvpQR+^nJy$ZhkHyG8ZhPZK8|?@q-L0syV`-$m1oqgLZGzNy90$z zygn6n9E*!PnC^CV_WyxNS(})tdyLjtwj!Y?#QB97UQYwCt$Uepifj60b^>m05Bkq! zcHWl#z<}ME*btJ*mw0o4Ug~T!Ie--P@wz>IuGF&=ZYe;<$J+vCWhIj?zQpe)b{NsP z@p$A{N*+0>Y{I9E>_bo3+1$)Z%_L2U?(r}m1rR)9P_Q1imabM4z=9%QUz|-HDdw4+ z9$4h(0fDF=>fX`y>?GfN^aS!9am;o$@uk<>^QFuv7TP8n(woi;QuKu`R5@aWQ z-Rto$`5;h8MNSOdV%KP>IzgTqbhifQ7 ztV34LR`Rb-YUTC`q(HvRjr-B=5kWD`!-u+Ie}pqW=d!k(muq8fxL|CA&LRJ6-JwIc z16pmIM7D3dmM1!^jvn<7mdvA<*6P*hcLc@iwT0u&+uKkVGnQhw?9^uC?M~9^c0wyl z%OD>e?7ueUU?V+OwVurMr2L_1s`GjY;`$Ist9U-_UeJ#<&r>$zi zmk(lN!p9TL!%@g2{hq{7#3!c!a1u}FA3OaC-Lf*H0=Sl*UEO%^PoNZwX=%xHXMT=1 z7dCEGU9C@gE;;SRiPI(nlF^WMiSXp;WDO1N`ysf?E)NTP>^IZq)w{SSC*F5L(ps~9 zMg7(PaK3Oe|I7K(=Jor?&n`CHupdWuwROL{o;|cbT+|@Ugu3i_?yX#~`Ef?0 zv$SHf#L)3xT-Zt@Yz=7qP=>@whnC+@`%3{U=WyYm(*-S0Bf0s)-4%GVB8+Q!49A1p!D6uu!{_o7=A6y|3bWstpy}zmWQ3}2xJS3&~=J#9>2MS{s+Ugs+*RR zvw*)P_!B8=69Jdrwy2F~Xuy-EACn7>@Z_}|-STr}s`j<~6psdYYR$&`POCr65@#l@UhPKQLdi;YdA@G@f zinb~l<%LCmIN%jkw6z6HrIjg%m6ZK|8w1CGf}R%%aQyp!zb;Jlc!~iL)CFdf!Xo>d z^t7RjoSv`133v!eDGM{|@m&27_)L7GqIT5cOrN8oCNPjyxVG;+%i}Ztb5!-evG$fx zbu7`^F7ECG5AMM&xVuY&yK9gT+%>oacY;fBcL)&NW#R7ba+~bE$2sTweaFZz#>!gN zRbAb)=6vV-)RX$w`&UcFSmUM+Bn^_X*C1Pe|CfTQMxpdR+tru?^8cZhS`|W_W+T0x zJ@)@`HjAfi4B;ZTU1S6}qvIwNiT&IGkSxgc(r6|zdp>Vw7@C;>kxL~VP@{4Pix>?W z=d6J3lzX#=#{m2Z+=W}N>$!=+nVY7W7jVg?35oCk8ruIlH2n^Rcr!}??w&UY>YJqy zI~(jF+^wOT$@BktC)~LzT`_bP3J;-QyTTxrF~Lsfd`B7xMzfTd{wamDgDCPglsN=$ zMPmH*$l3yyP)dU??#?wNlwNkN5AR{ts2%I}#*Ag&l92R(BXh7*cD?WSAEjUw?d=E# zRH)8B02rq_*zFqL+ou0_;J zUJudx^^JqWQZ%OUOlTmTg=Z%i5~1IR=Em0wK?!qOiq~2h+v>l07Iwr$oQ3xh$QVUs z4N?L>;Jl{tr57wc%*!?;LJI;X5)x^2tqSX-AOSvaB=8R0V&tS~65HPW?xQ(7?ejG9 z(Dw!C(Mt2??6{j_T%yDPa^8)J!#h2YitP`=W>(#P#y^RU8t0hPuZNS4Gjv-IcNEe% zOmzTz+P8z;?q*7c_TIrpEr29$hs+k3w{fi$z%NgANy$%(*;b9|B^8HQk^FF z6I}(wk3mQxD!@Prk4;OzFMIFc?WXxt1quk*LWc9xSlO9(LZOG z?dV(y(@F3l1FD9|;6F@dYc*$e|9zXtfeVi@POf87n@ zQ5^_Kf8PK)Sv(mxH*5`lzJ$>2YK8*861?QH^f9H${hp`Bt4i zxnC^U&lS=JS|kU+)%2A|Fq2MOdF@gehyHuh*88#nmfpg_SkG017SiqE15|R?*z@b16Z-;NO?t=nE*K^*u;>4 zHV_cMb&Y2ZGd3#$R++%!U=w2$A)2lq(cbsre*VQ5_+DCD@+T$wq2r1s5;_!qAzZWg zKMbFI!1fk!g9U-!Qw8L(!7@?{Pkfi$Th(W8{9WLYBFB_CL@Tj_yHsv=DlP(Vp^ME6 zUE0OgPkhr3+W-=Y{ak)PG&mfVd*y}7(`m%|_^n^ATNsxCN1AMOXJb~*_p&QGdXi52f^Wru1d!7-OKkF<^bU65139~P-bkzx$jh&}d_dt5`-b&N1M_u|oC z?A6I9WYtbMqWuZ_v`U*?;uD1l3ON{9!|j2Y9zi0svt|iFS#2+ESSCV+jW!nYMnNDW z-VDISmI1!#mLJ+ANhGH`jS}#heZq8(NI@!m`!K(l7KMK##=HIj40l{q{K zas2!(U8dwgW`fW0S~*H`c@tYEB_9#k*IGEBu?*ME?UgzR)ZEPkJf0nLEHEMp)WVe$ z&8u7Kr3d*!eLolEPI-u}A!M~VCc>HqQD%8n(kbRlx02EUXHF;hC!i*zDOFY+*t6uP z=uc~WMO1|Ej%zJo9I@TDdrY5TWh>3}p6pa54Cx}=!Yyw}m8FgicNA!-jl(yq#V$ zo{?{K()2}ggXAeMTD6C5hjo@Byfsn4$LJqiEMTzPxR0)kmPW1T?j!fvNXfS{B0j*8 zkkmJVwb<>;f;$OtG&1?oZKS7Wa;1}#ZOpn46jVqdf!3cCfQErBL(}`a$@GJzlCJJx zc}4SHqE_RtAI{HmADGM@As*rp3d3~*h4qDEMrf#HVNjS|zcOq%b(7_hR^wt5w$+H- z%IOdOq)TL_3eX8ur>j#DCr{IAqEb`QCyy_1EGlo8YjtBA{HcuXEN?UjRbopW^Au^y z06o2L!iKQi1qV0sTf$c0{w!KtV+CK1Cqua7;iAH$=HZw`^@jp?yeY#ejx>Lej46$p z2_g;571-})XmkUMv`vj1X{`7@-(J0=GoAgKIauD@W;v=d$%5cfGHG{Mmq=*JCQB{c zZQVINb!~?0)Ow}}8>2cea0F@e7c!z? zA%h(+Oih0Z6;w#79Y>F6Qu;CYCa+3wWqsx<)OV(83jt;!7|m0G{X$-+9O_5Ws>@Z1 zr|o|4xVn3irYlU$Uovk7Ck-pZ-khKt#lV0s23berQLe%;!$|qDX(9(;_6|+C4K%ZI zreR~EI~~}(%wL&Q0kB9ci-xN#d)q^>V(n@ZrfH$a==90sg)TD|4+#T+&fC=!s2mHp z(dmBl6Lz3@Lk27LHzsIW5^ON26m%5csg(`_9-f@j>RZcJseOwg=~cv33omTye8l2R zN+2Pe1vu*^47+|>b55J>n zAs`{L;ITXTVWgsC#Mx^w&9V1Ndt;~evRZg?`aX!2$GXAnH{>BER}p`2Ri!Zz_pMMr zk3|Q!eN9PdwcbsRP5QKV5u?Bm5$P`qDVwH+(071St|FZnm&ms#G+rb#nZ**|DP0lv z0p5M?MqHXoW2u;w@ziOrdj35G#j@2_hA?Z$I^QHs!0#cxJ{WiN*hDv&0FzI`c`927 zybE-S@K#=NGdL7UHuwdP6jHxiM2hp{83$*qV%&hiQjzNi?7b6VXT4C+gW7VsKu-!- zNw&e%yfxdWIJlL?7oP`nhaO09+}E#MYPIQ#95kM)Ok=wSc&iZn(4N_f%Wg~9pohn= z&vjn}X~-#5_Q^}_!Q=lP9R6AfTUZ0!OsYs}fL40ozA`XO&fR&szWZu!K5(4k1O9;i z?)$^t@M+ua#U>lIY1_j~GC&PLyt;IBs^x+k?HQR_#QPUs5b8et2I*!EB&}S-OO9pb zhp--RvBN^JiYoHf$EeWldk{|ZD3ACAO2`yE1Xd(KPou-qGhy5Qyxa?HKX zj&(}cQCjM|r0BD&Y(He9z;fvj+^%I`Wh$HGocPKV>`kNDnD|L%A__4nIitl@0pu{U?@Bz=8jaxzuTpX##A6<6Z4`vBQ zlrW84?&61*_L;*Muj73VV3K~r4J2WB&a1}*<>}u_W?OahFyMc-{7^6vCGvgnT|Z-E z`Q=3ZtxFe?C@B9MO~#RtvE~c?6SOvt-n>{ zH;4%}$#k&%{7~ll8`$Lj+NR=*L>3{#IhYkvuJJCFV$yhj7sbZ{?*(JPt5nE-gM=6i zAAd%6Q^F-d?tU|1BMl8kucIQFTX_GBXou>EEi^#@l(oeklFNUXuqJ6gmEKqGWrU?M>C(sV4D2PNxU0<;w`hZF^@81!+ zDc!8?MK>6WbfM$!E53#G{1w^WM9POYj$tkTj&&5X9!kf{3ps?ZwbTFn04f}~aEOyG z$MRt7;oInc4hB77I#y9v%>S19-!b6DzCZ&P{(!z5@DCO6pTOLts?*pA9jZy={~aJ3 z;VMe_ico<4?q_5mh0=(y9z}zW=L#$@F!67(8}MKLhU~B*LF*_8jX&IJ*d|v{ys<@b z{!U?!bsb!LMk(e=)fbOz$m8gSfWHA>j2~=rD*5j!NOAk@E`RiWeTM**d=mV6U^>ze zP!eTkmM3@CPh@_gia?A3w#u4nJtMWWn;;$C(3irz8v5NM_p|i>WDvj=h#?NXbf{4w zMhzJNUJSxg(%~J3`~C$HyZ%i8w&eP@T;IE8bY;bEHR}5gKY&cni=#&W?A2>d(&i58 zUT_e!JIDoG6?wlCli>1ySa8;t&t$}~FIfkvg-KPF}{X~CywBP}^ zF*`AFJ(@N)mc_vr%* zq*|lTW`-gPkwEo*awQSr5qw0fRDMh?V9SJwPt1#k5EVXjfUD;Pysv*t73RfP>gGz4 zOgsxiOX!wyH0;pD)90(Ch~%(8=39!rhfkD2uL1lKg%Q7kGIXNksMv0| z3ZULCySZExW0i!NS2!oqCm2-&`GHUP+Q>#>Sl#~bE8K{+lC*>y0vU}zSeUSeGanso zOci0V;Tv5b3?AWxPt(=ak#(!TPb^K40lLJ3>?aZ~?Q&uU4Omm0F~W|IFpAUy>kAL~ zstZrnA#vaWlf`>d={;YZkY#||n~ zV7|O_$@qtc+#Of82rFCytxSMPv4H5UO~6>7 z^%GBqL>;G+ypcP^S3b4NptNF-L>Xj#tekpYu|^SAQ>PSK_m13Y>n*@;xn^*XuOn^5 zXm}d|xCAeESoB7n?N48VOl0yg3cBOy#sXV=LW(rEKhd8$@q&!d$7LIRnf>Xa74pyn zUDPu*R>WtATXqlz)rx`r{x*PZ-QPxoKeo2oRKc=X-~k!Y41~Y}U1f5s{(a4y8%hvT zK$k&m$!g12&qNg$<(0~-h1(=I`N|X>OidbA{p}RdsosK#UW#qq>==5B9mIZtv_^=- zw8pk7OaGosA0I?iWC53*W%&k>pt}){^N!%>M_c8=Ai%ohWWMe+d^CfQ=wP^J-E8BE z@?j^-`>Y?}-qnolls9_G8+8{|8%qR`(GUsYJBkb5o(MW|a=osd2sY{{czBq5m{a3v z;AHt8?jJ25YL?A{w7Y-mzf@V@`U!G*nXI}U~0wc z{X0oIIdSn)1yS#$8*-QDx(vpJZHFdkxSh4oYcm2eFcX+vZ7?`sr$@Fh5X{h23D=#orb&djLh0$Ob1~%t+XZ z==j)j_7=%D*3F_qxTCvBJ2qQ2my)|G*^L>GJ z4@WdSs<7yQSxrt6S*%upO#FNV5wZ2Mzkh&CUd%8}5rmMqh5Z0!*;?+G%C=mu2^lNb@ z+{;bW=mc%pp^sK6+cIEdb}RT&(o|sEJs)}da+?cOknrs8tq0OhJt24;K;1l0tliwI z+9|7AnxKXLZP%Qf64#R>*Pq1z`?j`GVHj7Lc=zHQOU` z(hTb26J`n5VFfx5ShR1a!t@%3i(o8ZJ48AftoQs=bjo9B_h_vT!4D z3496-{gXe&ScYjG;j+j4)*T4Hp!2Ad;w~zlsch&5rJK}a70dSN#@>I^bf2Y468XGR zXC%p5tyu#7hcZcog&e}nbhhvz!zNLZ@?8CjA}QCStv7MM0q(YulI&DTRCN$HGH}J* zhKN($eG3$4_s2s2dsyTzI2mSlYB+0uDqX~)K`uvT<9L5a-u3KJ?*Ab$huLX~HsA$T zAvfuO3kY7%KQ{|%R=UeDB~w%Pw_WaB0tFDSrc_qTBQI1z#0jlm778X}G{WH>FAIPN zA0uE>b8&vd{z_rNrI5jMyS>=3xtaTV?-rdxE%gRTQnJDJ9{y?%Frk{|hcEVixaaE7dhEDUo&e17x-?fS0_0)_w-g0#A0A&l9M$Bu zyif&1Ny&p1svR~L;y=_UY+z;{5O?LWg@TKg#9W%>=9!u<)FsYQn>RWf{Y#5`D=YfT z5A+6yz=-+~Oe61JM)2}Bhk9?6p3bdSKTPCD?gPeoKm!(dJZ`4<-By?F>(hCBP0duP zy|+dGaik??$LGhJFx7>4Gp07L>pYIS>%i-$I$KRGsqxh%SN-!r#tCP=!( z!{k3)ms>Zwk89w+OZQc&J1_ZMEzKI8on2|M5MrhN7>rZPFUu|1 zo}(Ifz#tBBcO()HvB?g7bPZ3qOz=yB?Dii7+3PJ{UU$MLtHXDh-Y+A7ao|f^gC1$wRt8rlD%_c_=X1sv zbNTO42&aeDqfD7fH1EnYnw`Wye_j;A&u<~YCi=8GE@ct@X>fEf4akhSam{huu6S== zM|7eYp?r=8ytJ+;BpG72()mfS@eA3)!oo>oV!Mh{5mIy#(Xpg;bXmRfUKj--bAH0! z@E{*Zsh{sW#q%I1njXtT6c-?x6KWm7ab;n3jGLaPeDZtFV4^PsU0eTSMbVr#_EC1H`8Io_wOq<&1tPmG$6#!Ft;cHZj?7NbCU*t`ECd>f;bt zScyN}vzrQBhV}V$(le5nwJmIxW><1LCS<=^O#*LI`G-vd`%0B!09QQ%yyF1#z7@yA zi)1~Y=qh42x4Hbld2BAd+uy3p_K%y?sb(a`nA|+PA5tQ_H&g&_v#~a31ZBMbiuYK-DE3SD zStsqy^-)3+FuMn(@ogfZr6_>r^b9F@{87bW`E|~1Nydp+?4k(bK&A7ebM z)Bf@vGr~x+GQ)?@k5toS-sLme)*_g=Jxu^W&WHi;>lZOQ8=^@|DneV#U{%Nzcmzyq zE_Zd*qyg35af)XuL89xNCYTyVW&8cQx&HI~ro&~{>ns<0m%JXp12@;Suu#$$c0RwO zEZBA+#|rO+9mo2ypkq9?B09s7`WB%-nm=Y*##cHd(TS-$!iQG1&rC&wR+pC_01wFr zC)olObA`0pmt;ZGmosxi<>L0^ACc2uuu%uEOXu~ItPa}F2NpE3&bew9ct#E$P@ zNpB8t^Ufb~8l~_XU*wQecOsmSY4Gfh_Q?0|ZA~I#7noujRh!IZLPD{!7VWxxbI1to z>P$Qa%So$6aCaNAcOQ_l;JVt6gY)5WqqqXSokagBr%3r2Od&;uO(g@XHoX zXACRfo1Y@z`OiT4^)H$&y~Df!+0$?j`L;8!7Ki-ekhKE@` zJMER_<%5Hbqcww7V{emF4af!nO3=59!qHHxQmh7Gh%c%8{8QI<2$DN{fG0Z)^-Q#a zd>Mm4j{Ps-fc4#rX1L?yF~l?)i~`cx#TA(1S5H5o@#EdYa(n1c=SySydxA}ur^sk5 z0QV?Zbbz4E#VTwQwDDI|mU5A0`sz&1YAQsCr?M!ahk=50? zi^Y44iM%DB7lTnofauM;7 zV~2_Y$p6{N%V#7<@5dJc0tjtz=xN4RouEt<*xG$t%(x^Li?WJpGzJp;vg3_zvMD|mzS-P0MPoa^8_bxdw$80jNMvv8XX-&=;st!ci?qn3-6SL z$$Pm1)*o`bO}&c?j_d+4GG#S+{6QjQ$;#ErIdU+dNY%Q}2jTdLV}d2q%vCDLp2Hm{f1AD;Yi`DHwuC{rzFm)O8_ofw$N5H{Sn z0hzt#n^rUHVF$s1e+*+pbdbXhPpHRhVI#N4?T~T&R^Y7qxGW5hmE4GGdUlND*ia9} zdvvqb_~3^@10lL{JcH_t_LgEY8TV^%O`Gat{Cs5&e&^1M(D&;>!!Mp6a4#!vZOYq%JDPkHC-m-jPCtZf_jRF5B5{OC%CJP)W zT5s4@dS^eMyGqe1Xc5^iexo`Q_xX4k9a3u?` z*C6&@HSnP+_>NaLAEC50gCrhj@5nAO-nNhDH8F$B7*Vhh-oXiS41TF8?!k1fog6sv z?vC|PI}sio&$i$HL5!|=IoKURD7d&S=L0C1TTXqW&ysNT3r}MwAz40;*Qo8@8;Q4R z+Dq_DG&HnJUTb(PP-HDi`#Ro^!qQDAFD9e+;Rl~L=zI@tDj|TR<@P#?Om<_h7w}p) z4{fQV95-x$9RTvN9}+-Owfx+@7=y`zwiHr^5le=`)QV@%l|C47tTCY!7Z=ULEg^L3 z2a~C;1vgmm#X6s6#?_Tql|QZ0P7)`+N0YWrWkUJERS!ROut?(tFW>J?GEB>L`+iMxaE0M~ENfSR?_YuMaY^A7Q`u$Hw!Vc0BZ^jq$TnF`lo! zqM%FJhcl^(pd6lPGNkbF(nkH82aNHCR#XO3-k5c%k%{grX*EvP>z4Eh?-w_fm-RcW z-9=_we@r{Se)zznuGwBr^VrZDF@*_)kFO)mVO1ELx@^-{b@%1$?YbSNeUt7W5yNQd z>?}o9S%MthlWWWgrFo4Y?)N~*5T7fGX8=!6E|K4@?$8wU2b-Nv`9 zd#M=MC&DSYuf0AY3ZcCl&}`H_&u#?u`ILQB{Sy552eA9J=ONJmYwvxf^d zIC~ZXuj>u;IN>$G8|6 zt@*g>t+)437qeS=NX})@S3K_Dc5E2ESHYC{gheAvI5xUe|L7}H92o}J=CM85e$&G7 z0@f*Z`6*`6So}~yezbfMrh$&&{YRRxndX8x=hE*iVLj2c7j~*B@vgE;w3@Hby49X+ z1bd_=35!W`RFCTOcV@N@rS(#HM{wP$n#gIMXTc^jmm3q|$CKlP!;CcKH-#NhS#H)c3_39Qpo^k1x z_~W;Cc2rSBUZC{iKv%e{2oi7R@}ixpPh3oy@o{K*rvZ*NcUMhM*J<_AroYZ&I$=** z!$yo!Eeq33cH7ATIxT>!|JZKORW=AnA>P*xOJsT+V&b)envE+(iob1#Jp#fIR6_o? z{VWh#^`F{a@tVR;vZg%4MV*WQ?+qbSSd;%Vh%xCGXINo z?<1oycMIu@v5B6*|wvX2RiX70ZljJN2CT3gIA_BQr<2;Sadl6JF-1srk zu5Ke%U?+}l?et`kb~`{1KHsHXkCfYDb0FJQj3NY0_6<6!nP}Mw4>mo;8TfR3iXRY8 z*1mPnx48YHUh_ll?%8e6MBSFC_joj|V#uWHev2~#82=$({gKoyJ7(Tgq0x?;1BrA+=;qXmf2cB%t(AT zBE)J16dWHxx?{MB#RObrjCzbgWE4wszU0$khmAQ?iVS4CA{m84608^46y_39_h%tNIsW zSH9#pws;o-ehBxmUwT_#8j6JRrvFRCPFH99qR-jNMBeFg5URpf^$*%SkDBjHo{$wJvc@$~~!e<4!;ZUojL zpgBm>2wLPWcMpj-rP7}{SJ^VK|CQe7rvCz^TU22Md-44=kk5Q2W^Y1h@=tFSHR7Po zQ7%sMym=TC+7(V#rof<29xPyODjYUhFt2>Q5q1?ipveUDxYt47s!qJ9xQ7iZ zuomk)=`4GXL^$BJ$vr`BQISE^)zBh=!x- z{tZ4kyx>e+XW93U|5!Wl5YM;a3CM3nv{XCji(diC)-f8&Tnlul?FRhr9UJDW+ADo> zR2j61v9b(0jPU^Zmw#_~Ej~N8^dfNMw zGsdu>l>p#ogZEeqgSXQskBkk{KdhBz@iH`addXrhJ2ZZb@7t?&7y=WsEhDVW6_&u4jL zVWAj+va!jPx#G1pUk`#MY4r%Y4|R#?9T#-p4U){M`1VkTYA!eAzrzh@>tZXaD|!jE z6Too5?{zu1z_*_t1w;YOnlE>cVMjW9$DMfOwZF4G*HFIdk?zg9H|}#dMjHQ@3pfRR zDf~{7fdy-YYkL{Zovc4SK8+yni57*s^1@EV`e&qXKibyAOl~xlh2`+jB@GU0AN46+ z2ROP3D?8LiK%+HFmm)@cJpr%z7Ur#)OTJzwd_#Uhn5ls-cRRJAG&Xw*DRA*Xzc86n zOJD!_t;@%#bfCc0@v^Q7bi!Q4blmOV!k#p;yk|e#oXcXOq19%!?+5s~u-jwRY`d)= zb+W#$xzbdo@ClWulxUhuQh;(XPMG-jk@D;?DaH0ysDKjCj5;n? zcpxpyXj?2k8wlScF5-UxUQX*yT0n;Y zM7bn&G-`eJyLp#2n!B})Eigq9%TGEQEQWHaqpxLG6pj1m`ndSNe_oWN&KEfVSm3+M zq(fY^#XOVj?-kmd5Oel(uVjhRWQ*AqE>&|3GU4A5N{cG4Z=ASpZagQTC1G1$QAl9v zJ(wD5bHj%X3GOOo8-=Na2JNM@*A%m}#xw=({T+7YvpUUc7+&eJaeQwmO;CVN{O<@7 z@Sm}}zhz@0Rw9)UcYj-h20DV2iZz%?gVv#7Vfi-Ys-X4;hPD8bARq8CWyBsxn6Ed^(_>FhlIQ;*(qDFV5}}BG7{m zAQpx;F%U7MTh6EG6%s|ef*${q0W^X@VR$=0`uH>I2={@JFh!R2O9Uq-Y2My}S;5il zWV?8u-Qio{;OZ8E^#s-Y6pC;iSn2t&Gd?>}?7_;$h+a_~Ry}Sz9u1k`maSh@Y|k1> zP+Lx>Pud$p+VQmUD>GzwEWLMIXgCmhZqwW;=iA-EPx({N2QORE%dX9Zv&fFhxv-;; zN}d27luwtA)c?s#XyE)bQ#89_wrvwQ4DhymCGoyzLwXJGizBE0()k7Nf{2e7Kk%cq zGln1Ov#^GPn4K)PF~AUpi{0^OI$ajm@GMfH3N z4lx-;vX?@W_`qn>m~0*5`0bq*8p#YLa+6;}jDr%UXas`ym!FEEaLBATs}xDF4_B#t zg;8S+47B=}M`_6NjQ?fne)vBjp?D=CWxyb-26-P6z7g)NF!#R&BlK+t5PVDRb3h&0 z_`hiT8ImuDr70-#Pt|$xk##%#$HsX4zJ9bI{vrdQfzKlo9NN{!`3}Uz+_slk&x7KX zHkYOM1?YUd?YML7&#y)_mxt*|OZp?P7$)fYu)N9KaXX#Lm)j#s!MgBg5LdHMC-R3Y z2ktW3=WEWlRZEY4tu8?vI0&zKdfdcPkKobJKe8F{8z1=?kB){SX!K*8EgRf;lQhSU zNx?y1cj;_pSFoh+qw8t;10SCpF(2^UZ+EV$X?azMsQu6sMEOee@q9YK&7WG=)6cJd zX{L{M*OM%VNS?8@j3_JCYBIj4%7Dfk=uZ-^e3>t<@fOg7LG^9_dXsQ|CS>WJXh)!? zgz&Yw<(S`dBX*{t^XmlA%?6d1tT~-584L}mrI2eUKX_I@cCw6L_&$IQ?Ov2DR;~H| z8hS@F#6WTy9tOwb!s%o4jWs8Q_Di@-j{mEm?bA}H58engrdJ4BAf=!G#U5}-V@~Dg z;6P8P3reKJf$l^!Mr2*^7Tv)?Y@FraXdp` z2M3o(Pgxf>Abz|gDhiJ0+XVxAdlydXzA+p7G3ZCAQe&3jmpCbgQRa3B0PW5%fX5X9 zK%<1@tBeM9ELKkiorab!hs;$Dvckqi4J~;r6iGF3=}HW@X7hW1^?n6?2^Gl^sv&6R zTBMwk3(XHn8_r!&6|!`qYEZhRzyo++-Kd{;KWHH!L;*)3>R*?I3cmwKk=WaXYkCZ) z$mp{lV`DLVm^uQ5V!Vx%Jr6t{8|KcmF+T=C5Pl@oGBHE_ES0P_Piiq{U5rC-q9~ss ziNwc1BP~hYcb&cp{(OL{=Y{d`N6E9;gLy6O0~NA&U|&8}EWc# zcz$D1#$(jp&P7;n9LwUp-Hspka_!gA8hdY~W`pr30q@si130?Oy47chA@m@X`#t^! z3>-EAwz~YXgIL@ZWz2&Zp$>Rsl`c%y(ev)M`u49C${0eN@Haj$8(-fN>AWtJy9NHy;mzxRFIr0QSe5?xm~}cGU&T zY-IPHoEBj+2$}Dw0Ohxq8oYg_{Fq2lz(F#mgSp6KMei{qgb!(!m%YK&^I^6IIH_Tp zThU(<9G37c-C?k>7;yjM0lb491zs${$$DcbI%*Z%Ffq*y_D7vXV2Z{$2?F7zJJJojmeOn(l^m zD^Zz9%|6gSaN5;%iW9dIke3%P`3*HHcXB9D86D`?`2`C*eVTu}29`qE1}iCv3-k!4 zR1tsW`>&x#Xvz1Am{8Xfe4pdK{5ZqwINOH!j*fJ6Yj&%l)a=TO zWda(R*2%-6bGYrn!$ED1!)e~esSee%ANYP>W`xwCzrPnEu`+nlrTkg%cyn994mIjV zAv0wioJ|PmF6L?C=Vm8xjROVr;JAmJW9+HN0v-@)Wvx91sQdifcm8&h9uBo`u3hGG zK<0eU3COx&%o-096OI>={vCZ5FxHHZ?RGcSb-sUQx$3VN^y){;rR0DsR>*w2kmJRk z>oO;GwUxDf?*;flAo~31b$t>MST8fqyd#tbMnag=;2Si&-gbMKn6n9ls@P}0~-^pN|;YkXcymzTOS?S}6_YyNds$Z!R zS(Bg;UR3uqG~@s47V4e_y^l;=q*CWFOFilz+3>b(59sfW%YnpmW94>4QzPpi`b@35 zsI*ssccs0H{Nxr3(mFs}w^zQ=#Ky%B!i3VpJVAVZ5km|Spid6 zVtObx(#$eP`CK8A3eZ}Z3`1W{P8ToDM%aNcX(yQgH{Wg0Mg)ipMY03l3jj%X8jt~? z4JEAjZf|~Og~sYJO$MkX<<;mo6xQDPb;^clzR4%w{*k9yJHP?O` zQl?v+;}hv6Laq_}h}d;6?Rqz^CY+4+HQo`HL{3d26iM7XaSJNMgd(#}O(yjTyXP%D zgq-ohg_E>26`|kZe@-cpNAIy5v43vtC1QbjQ&uJ$HZZ}68@x$7fgeR;ZH&WY0h?O@ z9*pPKghSbIq%a0uUtQj$p1}-2p#V_AMnW3Bk$vA%)16h?YLURCiTu@`0yVS0YEh98 zVBUg+LUdhtXn;EPn-kQBzq;4|ij{C8?=WT6E@Thiv=AmhiA`1!)^wC{bWS|-t!L=1 zQ3x3)GL$9YLLK>v#wLPPWW)YiJ7H;O?6J&@scVc|bp zYP8;C%bFkr#r>!9G}#jVIVIH6WmxkK9|Ks-9u%F$@c$N;Fi!!T4iKZ_n*j_~rV#wS zLkWD>;d1nU#I3*ycG@bpT$Oa%8JS6OLkK!V-e$EqRLZA`9n>?Lqo^Uz-he@K9lzPq-oBS zB-Q@9-*9#Q<>#OFm+(xWpSPn*?aohA`(-hQjS%pvGT7Q1|G|Qo40^fO6fB-em8P!2 z1pyB4xgK9f^2Tnr0pKr0!+j8CvmiEt_}At6P3juHmal7Qp1!_oW-BfY{(Xq=6|XLchLj*sck1E;b(U8K9-iyTO2^5ZAh7;dG4u&Vp#PHM=qSzzTWxOJ zHI^^~f0cul)JS#zdFs6w{JHKt=J8f(sFnlu74~(=-h&+RjH%dPIEGdxcC|Gfj(--yxg_1<;x%}1WHEA z*sg3*A!>!~vc_k>3xDJ05K~rs3oY-Zt2tXPYiAaxCY|D6-+HH! z;`er9z3QiC=8jJd7yXp%@8owo@UsZsrDb{CAIJZ6vT$DXDz$r4t37=CRbR0lORX=E ztcixVcH2L!_Ll;QG}IDHYd8Fe~s*8Ok567f`b3XFOC^H6<~(IZY_Olf{bPle{$}}&XB@(%9L}iZT;9%Vf9I+nSL%)C}t%_CpUNVIlAN9 zU08DAn6~#LBUk=UNZMN%5S|17mW1 z?aD(l{O~a&<8kbUzvJm@p+->vjth!)qse{qr=pF%TW+DVP#po-olk4w)r5~vv&-e~ zf5$x}Jc3`*j>YMp42v^$sAX#jz&^sDj-kjJs%mwZkWi!b!lhvmuIF^+8NDa(5gpsb zb#Zn^f9};>t%Pk8Qt5Z*;!5UW`{_G~s3_=pu~zT%ayPiJun)Mxuy1k#Ji>`Cfm_cU zH7dUN3_jCItxH2t!@=xW`$KFa1^~W1^Vn~a41jpnP0!dF%UGF<*ZnB4$J(jQtQZaG z#ouev2(3fx5M}5h1c^{!u;E=vWA^V6>%AT(m9bd5Tz{XLaj~Qg^RWRbSX{GC6-Fw` zga!>bTalYk)NI_=`QT>U3wpSL&q_?ffPIB0gU4A0foR1KPfj$ON?RUho)4U^^+2FD zH5$g+AQhbm9JjF8ClZ_2gblP3&(nBVs+yWKko2#GdskP^nnvF{y|ucEz`O6<9T7rs zWPxZRdjw|@(d!QPj2!Y|5{@(Mn+~#uWKbgdnEM!sEBt(-&c;t!JuNrHj=L}M=%SD4 z@?Bk{%>^|*i;0LF)9QnSZkpzIi04t*vSuDGd$3&);?Vc0W+B^0;p1i$ z6%CbiPRl>z!d?J6)=7qr;U4e^`^D1-M=r{L_sX;;I)GCCyWrE06cf{3w4x^7>z5!m zo6x=IoOcL%=hAY&n@Cr?>g_lZ2S*v@#)ih|8E9!3)*al%p2sPQezC?mvBp^qIUzVr zLW#UhgOxW#{3g*fk`=9zk`kPcscC5koVc9a9}RU9oQ+&_F;X?*sb#9!kE4*lze7&V_h-uzgm(%=$ywp&?d$LRnV&!NOOC+$i#m3JsN`5@GIC~cus8xW zEiLWd;lW3b^CncdUWUl;SIoL?$h)0wS@$A)6N6na7n=f92~}EZbamg82~;(LBZHlf zr*9rc9(kJFV@8>2kfK9_16$HAr*LmoSajU*NuONH#+7k6P;PZ=xR6(xXuQ-Ep`jU`HM?&tGC6bTW=PU!R9*N-=jgfYNMQDm>zMcJ7M35dC}dZM zd#gW}wrfI~ovjG6VxXw=zaw3}t48BY^SatQ_x6IlzrTNMy9wz%-xLH1qo-#wGcc4S zz>i3C7r#C;Grr=KfI9Vqv_8)!cOg!(4fEb>rCDLFLVLnZPO@SFN4VyC8Msl~!UA)k zu^icDhW8ZfQNEziR7$B>Mh2k{H-N1ftw~K?Ie0JcLrq|x|9EPB63l{^D4YQQ8NQ09 zYPl9(y{52UyAg_2u!&~m`&9q>^xW9ohpEQOX4yUZA`3Qb{oXlO$4_11#@JcG;?$RS z5FDoWW$EehyOlxW8YswGKi);-O>0Z%L@`T=7vuA=mo&ORSE$2B$-T#Xe^N+VwElcy zYt2PHpAiGEEo+?Xw`Tpa+shN(rq7_uJ=Hh(0&Hq+*Q1cL?dC+puwZ%`8uq&D&o!Pe z`gtL)M*?D+l80yQjDH^~N=VDe_+8F=kJ;~A zaIJ;!7yW1qo5Jb$lJngZGMD7zzD7Y7C62zm9r9Vz;f|+8WL#z>NV?uzT#xQ3JlwbH z$syv|ya9!r@L#omxu%$yepgL4-dJxt;XT~Hy@kx*nT?KVTQ>5l$6d3C?0IptU8SrV zdXdRdKb!RY=t{tEgmymV3*%pMk$g@s)+Q#7g~Us=a?P7ZAm-lS8j5IPRRo_$u=(?k zoAaU0zT?Xz@&a0i)Qi4F+qxO{Z4tNwfCBa5#UK4Zo|EW-a&Dk{C#Q06vz}aTi)ZO=(V!ztu z^J%_;n8oa!do^*R_oeq?)H4|=tHWJj^m!NuV>*rCsKt_Lc82T#{+Hy~hBAe*-+`JR zT@N7sAl}#DmQhr;LO!Bo`1aMG9o1WbIM<o-O!QrI7EGk7FiKM$HmQJ zvB%%)xIu07d>)M$&|H1w_YLiDy#O@&-&~u%oK`!mEV+>gqf9u9EudNGxE)RsYlL~G zrX{~#%n)d`rE~&mCTiTtf|vo&A5Dy>&nkUAyir-61L6 z-QC^YUDDm1(k0y?jkJJBN_Tg6NK1F~jgR{7{q3{gbM`rZGRk6R&5HZ}UDv&aFk>JV z-XYxR`B1E(@>9u`zamxu@&o%6^W|XfvP^pe69K9fH3nYl8;J1G+{qG4Ezh1?GI%Ri z`tKltB3+yIsWG-8Tv0fl3o*O<` z3khvLky%Gvcu3ENh>T$R1ppQZGdUcnuW3}@Qjm9;yghpBaNM~UwA@dZ@MFZ-ZPw(H zVn5b89jo6>X7Ks)1`E_5b4wEb+J1^5QnO9+4*H+c;3FI##x;qhk=d`A{L<> zb8whxbAXzkNJ>jeNKOrF2!4P0`D&7{Won8ZZ`s6r4-zsYjsY7Nd$L)=JpUlPhA7v* ziXJ##Z7*dV=KQ6*_`z$5U456$mQabm1NKw$yrKpko6km9lS;#}O$}JDo_8#*ej5mW z9ASp=^orQdql&VPAc0442D+Z-jvik>rv-L!5yfb;^M%NvMst%I9u&g2OWCn;KaBb6 zPKFD(NObfeukaQa_{vsNGzWJ_;zPMeAwa?>Z7cZH68KHy6zO0ZX39iZNIu1auqHJ) zW-N8h-(*~Hz}?+dUS?QPLnR<5Ku>2rPKAKiPko4iui88@Dai!R{IU5qC+=3D9O7xs zfpZ0{nWK{-vNXc*wvFU@9n#9O1P&Y&nq5mPW3|<Kvieq-MK{K-=Ep7Fgqfd_*Q@6Vw+o-eJsgNR`S!d+GC-;vDUL;n*zc=>}Rm+!^a z+MIjBi*intytV)_PbP=`_%IF6s_FY&gF62hyTxOwV)-mG1_loEF?hMrzV*=Y1;y9x z56$9H>EiXvNH6XW8}TY}#<^8Gdo7(rZ|Bs_x;6<7Q&uI_=4}45faRevmOA^NO|E+Z zH+oR+2Q&40I7pc0-q27JmbEd*I;(Au3u|+SH?94Z^fB9nQF3BQ2p|sC(#6w0KF`aw zPC>II-l;RS0m-%YKbpLrZ>;PYmlTm_{J~T&a?w!E+?NUkU?!i+_&AY;r&#;8>U{_M zX~!AbiT6Usd{R-&n{01p6<=vcb|WwK_Z|; zP~})LXqg8{7m^;_iwW%7HRdz2Qa(N-ugz$su}?5OBIwuItUcyVq%p_Pr~Zdy8a^sDn-KsN>5k;CNOk+7WF&iN|bk5_Db983X=o?syo@&utU{?_j+O$KhsLwMnYS5`GYRYcd3 z^L<1^^jCR04?7pDipPBhXUi?YXbc(m9aIN5onR)R3vhsb2O_4@{bx?bj(`bEtW){!A0Vfl!= z3~IC%AVgHR-U8D>d-f-(1g!zLayEBpjHQbKGKG zQG6mN63s0wZ89D1(`&95;wEa#prIWY;d`}v-OE9UK51hzKB?(`%_5rC$ESN;Zda2f zgp^Q;BWE$BPAWBpafrgi#-PG2hVSBTIN{$q_i)%3L&qfGF9f#3S5L3kDIlO3fJARQ&o+l5Ph@v z8a#=>Eb;CKr{e<(5h%O^;Z-^HR&|O1uL3_if2+7zLOde49_H1pcSO4%@NK|&Xly8WI<3<(Hjm+%b=`lD0;|#78TJ-!*V}a*v+x^24*$) znJ+Zydv{*5?e|rw-rfKTm{ zvIIDYUx~D4MO~&_7wym2MKY>E2e(>pV9eBwhig==yV=YSjm;& zX!bl6k-U59rl6&h4Z*y{Nl|xa0CVS^ezWiMe499w;m<{Ou@H$EHQ>aV75TQ9WqNO{LR?2 zDsRKgXO(3I0x)VsH04r3wUf%RiM#b`Pb9P-PM$P?McsRYGg+F?^Tw&2$av6j_nWiR z@EEUUDjxi_C9CGkidZ@Cs;($J6zg$l+$UTcESHB+y5`514_Cljiu*LQ>EP^iNx1#h zWv9sT10sc}NManY`?`IGQ{JF5k(LZ+jq0o7hJ+F>(WbiRI&VtvKH^1s5I8hEk$hX= zBPqkGs7hAcCKZ`=uxPvdQO5?~zWR#}emTf3eY~-BYIUPijVKLA>O^>nwzM!vK2f9= zE<_R9Ii8T>kJ51+(5-1S*!1c;Rw8Ubg??)GU9DY|A-a0g2@!5BxSfrA21@+)`N2h} z*>SIr&YO_$!;Ogun4U+4HoJX)wutu)o|>A{TAi(2Rx?n>D{rkqyHNkQ(f$~FaA?tK z34-97rZ(9%VzQFtdDdM}R955pyl!Mcs&(!20ou7`1T}wOUv)> z{aypF#ul&c0R%^S+(W}GmvFH2Rr-bb6{2HP&E|{I{N}P)GEY7mZ)!AR<6Be`C*K zH3OeSCP{*_kcpB4oQ7YyWvGEQ0`Tli1-w`IG{W(t~{?od(>ef0J9 zL<+va!R{R&9ZpSsJjCzd#Yd7yQ^m7uI_%0L{n(2U1DgCP;qYkEwSQL)?D3kCo*t+! zD^qREt%mkn`yCD(M&&RI5L1&gQ)A@g{J`-h|1eeunAppj$|VgACm#?p^?7gK?s|B6 z(rR0*%ZxtA?pE89OFzV8C#L9&Sm0W$VG% zCBCX;mmQ3V!3-~O@J=C4eKL`u81+PL&c z!gP6WzpfK?I6ii=n0wQ}JLH}g0eI&9IX2h+*O2(RM2$R`@8H1@?)JL(hjIY1s$RGg zO*1JeHa552JY1=s{N{Z5vBnuryP=kF;x@msXzTV#9aSGX5_pU}v)-|#n#PjgC_B~+ z_$;L!Qz;o$fr?Pv#K9!v$cTtplvV#lQ*35xDAv1M8v}`_2fs{&d-06xcer@kP0Ex> z)dQNKc{vHRSxOydZv~(e^+(xAZ1w0`4Z^-^>awAGLYuR)<|`=y9VyPyCgAAkhA2Y^^D4+yG_pM@ z;xZf-+3NE+sY38Uvi8PevP#EW(!sN(^)>5bRCKDzMA*&ouEnF8@$OPqzk<&b<<^#O zbN#K8YcTF>$3`NiT@4qmG1zM92L$5@%S#PgS9`NiG3np`0K-y48QYTunh2P zJw;6;>9XRFKhpAi^M9Zqerg;r`f5un`*6KqQmE*Q`LOa7=qoYasq3|r;oDrt!88*z z(kd}7gj@)Wy*b59-l8K6m^ja?qq>QKcl4>|)~4KMk~tZ>Ax8W!AVZNCU7O}_%LJU! z>0U|W?V8D!$~D&E?WU)QdCAF$xPrtBq^B&E6RsX&UEvMVw@}<*GP}*30ap5M^&e<% z6}kd1iys`a&!}cat@wES9s*QI(aT2yP6p^Pwzk=r1@07dOFuedQu)uDPsFm!O++})e7 z+9VSi4GKxlCG8^t$Gqy2I}uG)9tF&Zi%Qry|6=3~|8}^d7bLMiAw)qksP zV6U>&Um(VjQ7Nim<&C;J`x%B^(e65ovuR%y3>*@~L}-DUA0FY#T7PVOpeus~QN+so z&ms@3c9jj$(-@~bF!xyXWnSDh)HPS%?MqUJ>7}U#V5MUjHXSi)Pvr?!#eRU{syd#- zTEeD6N%y|yz`zU;4cT)`eu*3W;mb8Wyy=u)!+f!$;p1|;AZ?%lXO`aJ^fB{WR(4EL z;7aOS(}7%=WNLckGnz^;)^1+y1)3q2^2+SWo76a{%AHqS|*+${I*M{aEuEx@-$I*i6cKexREq}mI7f8Os+ zNdHlm#X-rcy!EP4G}DeGAdHTO$C%#zgD)J>>S`btfs9P()WpiWWE~vz*D?j2XD=eB zZl^L%WRGGLq>{MS?>AzeJi`T-NK{&!J2N^pr!^lZSi&7`@4APM1{o%ylZn&cM2u+_><{Z|Dwqgp4| z$f$eHpQmzh^~@Z^4DYen8s`PPWB9$VQ${xhT|~sB@^Y)gbpun&RYYC1JVA&UCuXg7 zc1h*)1R0HXr}!%q;Qq1zgegGhszjCpRX4sb;>$RsM$Tkpnjq_+AsjLy$mo0EW=W}N zU}Xy&(a&18S@GS@zLl|*5?6w;emsQW&N!@=zErmh7-eOdW1y$E)(;gICE)iJ6OjY> zmV-z8cveB#Sh>L*QV5sprZ%uk$+4k>=JjD8Ou*v*mZ*SXfE^B4GN5w`%~PWLEp4@L zZKZ=XY1x0gwh~FUOet^ugwuQz*8O>sv`h~)Y47r$6(%BbxNy=kiQ3pCT#^vkWM^AS zMoQYRwM%Vh2NT)I$f<_8>r+?0(ZWb1PVdh7#RXh4+BS9cj*_eXKzw`(24*obG|?ou z1o_*4)+#_C_)s=vVE2ypumd@Yx-(EZ4?$UOGJ1TcJv&56<4wLJAxd6_W|a##uU6AVaTxPSgiF!IBW zp+DH4|B5W!&I=@qzvjWOEBmQoAc%i|fPTIJQu#ms0*FfZkN`;ed#}R<>Z7ng2ntXL zE-G5;bI;@32U|rR1`UOIjM)?_!>@Dp%gqkEqEu2+9*36?ay~{w)gZ0Z=sZq`7dhRJ zZ%fS57w?B6WkF}*%S-sHQx1dGR4FR*xed{0Vg7ZY*h^iB4Fu6z#TJ;Ve*Ek7PhO{k zD)_1WCPNtLsWYmf@&!^dGUEMY3)&f-({a_5DyZFMy|Az!p;c-4a};v5f!3hrl(VWM z|5NjSE~t)Ecgd(C3y1G->`WG@@IVyV(3w)AMJA_PimI{}dVc;K|CQhioh;1n?wA+{ z`PGG@jOon4NHs$Hy7W;?CnH3xPnekMATbbEMM*#APk%q-mH>l_%^OICuBnQ?l#cB> zI9*(H7Z}ryL{Xtdy(Rgl#j9@}Z=e83im9f%GBQ9&P0r5CT%=Q6&xSrcGDe~J<@Y@k zXv(;DQJ0~rEB$$h-xsV<-faj%=RsC8vb-Q;$EPP26o1iD!Qv`n4X{c{)bUqS<*CSj z=+OR8zX){h-wU~shbr)3xWrAqr;b8GL?Oah3sq3(2%_Ts7?{Zm%UW-NHIa&)fAb+r zB4=v4z=%IotnZ1-=Z#AJ1Bk?^Ed01ZtEo|mLcye!b_TfGC&9Ykcj)_`?$^7M*A)A6 z%YQCNu`+jb?mAqJYEN09s8Y{Pu9=w`VGg*~BQ{2Xa22T*=oe7v8}p3gDd;4nkA zi-kzi`nl=&jq9_Qdq}PMBR@>UpsHh8be-oOqAhte0k9{}0p#FTC~sTrLeXY^j*X4( z@-VtNv4{ah|DC-}$?H`onI?@09Eahqz|Ry!oE3KfgCg^DdcDU>{sxm&*G9~ z6*V+`TX75|w7vyz`d1$nwont80D9F>R9eJdqQJp#@Wva9DKaf7NmY)_wD7aJ>^l;& z!IHgdyx-Fx?^L7^9~a3kD+D@lJ+s5Gpt#odxU#UM+IK#$I=lpMIjlF`HjXXsq}2dy ziD>e>@oVILb3^6vV(X7(|J+UEqQymRuSUQViW=r#Z~s$jCMY7l^IKSI`K|=iqog!* zu)=cPIVYfd^r#PX^urmnyM5schs2&~HwTOh;GEFG6ID^2xz=Unv&E!+cve z0kkBDd@wimlrs+QT@r9kGkF}E!S^dImuDx>6v5CNGbP^&^d8x>IqU^U!Egl$ky$sX zRLmuGG&jQH95g@Br`|3JykE@Ms!LM1PpUWR?VI;I?J3<#?2pZ0wKI_;19Eq>QG>Vd z(DKU*>fCxk0X|^za)_{ey5gOXoHgAwc>>U2!m$1y&);mBw}?^(6>~6VgMrubtj9veGf-=n4C<$bK(O&KN69$$HSPBmCFeM6B#@ zJRI|kJmztE@|+eQr1$BV2r3(8Cmvcb95N8GdK<#IC{BSwR;Odf3Gb+a`$6>y$->m=%^M&v8&DRDX z$?i8XH387{U;==|ZjO4(rzLI`d#F^*Xm2hY&MzzuUT>bGmyzTNmJ>5Gk#trItf4^J z>`BH>Z|>h^Yw1=Qx{88KqOJ!Il#D27bU(!+q{;qSnJ21(gu^=)6xXM^(7F%^0=sLz zIY*G!ybef(!!0x%l@u0Ed~xO(xcA;1nOCr1Yjly-*SDMfZd*4lUp#G7F)|od8H1t3 zt`B$pH0Wz@u(sM@E#e^AGsu!UkZ`=@(Q-xyr`FZ$dRfIfBa$4>*x6lp?8 z!`!NJfCbHv@$n@J=K)Cm?ausZS|)aJ(Pt5CBMkd>h`OKLl3G%ZONC4Thk6SQK1fws zy)CiEFtm$C5(R&~@!ITON6fXaMESR2R+JvS6ih^Wfj&^n z-)8}PR|6v-4e$Y_!rbcM?wz;SB8j;}Ly|*-l4VrGR0Eq|s{izXT#=<6s|<$gkV$}?G~Uvc z4P6h9ZhhV!G)P$6^ZOig>VIPgf`y_{Q;Z8@MVp(S4k#u-ML{3ZNR}_4)8VxS6e47p z3|?bLYX%NE1U6_l!4Xr%*KBl5=wz60i3fK*q*#_V;OqurPx!vmLL62gRo)$^LUJH6 z6Z_lwD2SpoXgj8Lv&p2Shs_iL9!5+b^>n);p3;Vr;%gbFNdG)!301gD1gz4UuIDkq z+1cP__9}lEsWd=od_dCui}=%Fh$7T})*ml^Q04s5OVjY*d3l&2QN+Z0tHHww(=uk* zA;bKU)Br7hfzjMzx}NXrR$ZSgJ=1kY4P_XE=Wkqs@7mDJHr_butFi5*N#vfv_O z{uet>h7T+goH5C>jD~$Tm&2)f8z33TBeKU4+%n|__vR~?+P180)D2ij&db|Yt+(VP zWtbg6HQ zui2fq+FPaWvZ&bHtNv#}em?luSSAuE9Gt`XE9&2_8zQPfN_y&m{k|7H94r@ZrEmLb zvE1Z2ryzhmpeOVm_?X*RTC=Q_5)mCA>YUqh5qekG@v_IsqPxpvOR4CW4fNa7HBQ&L zDU$wi;qQ9Zu?W@}aK-fcjJ`YHza$nF6D&0^c7N&Jy&mq9&-Ok%+Nn7D#5RmsQd%a6 z6|QBoQX`?Dfs@Zw-Fj$cnhv)om&Ik@6l6_7BJx~Y8$||Jl$nXujgpj%wxWGoD6I&r z&M-4k=+#<1u_}N4H^W0Iu1$ddX2aJ()5eFm5aHV8sDe&63oqPDMMdd7qXl5XS*or5 zyB$cf8d+)?Kr+aV)8bIhEU9MR(QDeU*B+vyZ<|^l^9d#0qDsk(=K`n09hOBmtJpX? zN_mNsCsHl%TkA-cT4JH7mL((zANSt*_ze}as-c@gzky+q(X5DyqP3+%sCf)k1Y!eG zzL{B78jR3mwYb!(w4e;4Mf8I3qFlOSi^7r@)|2uRlm}SqCD~rg^Ey3U_3ACn-eSYa zLEbh&IW2w~ioNZ7Ys2`-K|F9@+l)84So;)^rgN!v+`gF5sb#Po~c@QrJg~_e$g`|q}QhIVzoa$5wlF3 zi`=b4FV=zD66Ga+U` z<{d~~o_ut^7=%7 z^BCegwO?_(CANr1bOd}f(TD(t%kJtx$L5|}w8PnVW~0i*x%4h6Fk4-T1@CMAbEJ>M zO`JaRPJS3l_JAO4i(o2ATI5sqk5Cq$P}pB=0%URj1oWhV1YCfOBPr_Q2y-EX`ifhj znvzndKE1f<+#J`vbo&4T&QGh>4v%w`XYRMzU5-==qoh^Zzs^U7ov+mW_)E|QTAFYV z1oY|$HFQVKVS;RmX+Tkcp~oW>66bDwQfAKiN4~qynC|I?i&^{FA> z5|X0eqnQ@wqAj4gidj!W|O8U^gVoo(TrC5`d`kmj!s^z{#*AW<)M(Wr_fj)&g#22Fltk&Yx~h z5ZBLF?lL;&aeG;hmWc>OHC-#}-MkPcF%~8<8jVH>w?DcGG9SB9rv@xAo0 zT zi}j&EKf3|*uuK#E!G$&aFT)QG%@{g~rZH%R@gTs(z%g)xiOS24$*Kz}|0WWIk(OzY zl%+HA-L%`w=TD=GYQzwn^16-ZQv!-HR4krX$a=>$h7b(vepfU71Sntlw6A{7;iKr{ z+n;{eBR2j)hIN(a+sw7(H=EGpws($7AQ0K;u@1l@T|At46I&~1R{LL+!{w)qfo3cht0XwJxQtxnEgy5kD~o#xSWphy++HL zX;(idm866!m#~~K;coEwpqvjZt#6L!)_N3?m~Zjm`jkadK;Lnr~&pr1?TrBi7-{xg%jD@jtw zcy2zhhZQ@T&Ag3E%uGe74S`)d{n3&6S&SWXtJMb*U40oEOdij#wei(hBC zcw}3?cYCl@S>&0hGQAEFVyDGqzhux&Y|M`W%@)@biE;iTt=vLAbG_(u2zYWr+^6`A z_{3BLa6|t5wOqy#P?kQ5&(owmOyB>kWLDJCr|N`sWQ#+yFeowg7|2bOwA3%i7_(#3 zV)-rQpnwn!dTSIU^e}{X;@e+LO3I+ zqRTVh}$Hs2FHI7nhP! zeEcf{K(nRyL2;IBZJ|%0(IX{Az6zkC#EB%WvV=(dL#-{L9UFCvDx!Su(Fs<0>Zj&s z1GRR)tZePt6c-ni5>n96N8H!N6VL-;{=L}< zGQQ7Xz+`rLocu_}(yzv2uV_)&^I9bvAJ-wHsu*`dJmHb*ESx?co({{-r8J@ugOXC39jU>%5 zQj@^LB;rX_;%H^z0T{`vi@O0(87iZss1Y0f9D$Y(?zb2>T%HiuS_t7h1CsNO_?iY1 zaG(fST3iY6+`OE)F%Ag5E(Da8aWxw^heKewP1v7FU@2V+5&#rSz^3nh()mH6T8fCk%& z`W_;r`_YvGQ_WTXxyFxjq!eyG^5aMAvQlJdwxI)}=~yUUo{d{ZcAi%MUvQ(wMd~kT z|D!ek0` zxok#RiE>*Bm3T7lybVNO)g>WN?j9D?jUY^n02zFZ3wzWbNar zvN0VtsDD9cIk;x@KbzeD6?E?Yg-rjn;^+B`f&Tg7zY=bxax;kkAnQPA)gEI7iaS@d z1Y}&#K8#Pl#BtzP%V6~L1OKF@{|n*%pZ~FlbyYX{%Cxk!z!u#sG9ZZv3={@3iu{Nc z&s%8swU8gCl9q>{z=G$d2Fmy2$Cg({2PD*1PM^{otS=CT_

W`ob3)o9(rEA(y`ih#)pgLv=c+CcdoZHC}(L^luMe5-Iy2Qqt+m$X{9oi4xD<}Q`jhEr=Q zUgtF@PcE~#R}t6{P=@|JxPd3*FgK6yO}w6mm-B^9UwC!OO3RQDHV;lfW4k5B|I-c9 z|01En|DJ^Q^z?kfI|gu3i{~Q|*2WvqfHxP`Ipta@C6R%rS)6)+43pCE6o(Y74!*j@r)$`+tkxKR(DpK;iA~Ampbesg zH_>l%GhZ#rQUn7qIEf;QGt=F*Uwc@dWyJjv%2uY~6xo*<7xKEJnfWq^zXPfrEglqi z0y@m0FVp?BKMMC~%La+-EQvB!G%htIJaBlYGXZlXU6?-$DCS8WcCG%lR%=&U`qfa* zSxl^7ODj!%H0*8|sJj|)ebi+pmlx8PR}uMABo+b$wLQH&OUuY?LHnTq>h^7BU((E6 zZ@kV;NdRnO2#7H4UYn9WK2u3rGB&ofgn>UEAC8Ufb23w72Zsjk?j91!49hX;^%~sg zA#r3blYiEq2)KY!2Xt?a8Pu2!hnl8f6eSij5Gy(}Z#~)N#BQedLiBJz{yQ2fQrKMb z4(CwB8|VK=Lk9&YM(XVsm87KdboSihE^oWit8&&_91qf3T2{(jm#xw{SZFc_lfGmC zj&f6DQ$!>h85U*=8X5^rr`?tvpvt2C@>QSW+wKKLVm3eSeoqf=mYdpDQIDL4Zn0 zt3ANEH#Rm_nt}9@xC%DFzpLirEq8J<`sJkn2R2Xb<&yWAhl?z(P;E%@rI}nUE63{j z=_Z_poiJ};iIBXVzLJvT$BRlDS80Xu+NTfmD4HHlLlhUT>uqpW^R96<30t*N#-WIZ zVCfN3RMiQwEe3HR!0e?p{JI9=!^px$>`Xf%3q8a8$?LU?hh6mQMG*m_>W-9rTQ~0X zy-q{MkjWlKk@?OZdI}m^ibErBz8@eBX<azSue{sjmblK->vNC1&lxN+4m zGyCuhP~EG@fgnOR;&M7Alt59!yoJ?Fs!tJ*t;DNb|IYBKu(b5#y?yI*PIC6~13VAJ99SLjP$E!5+xub>{r3$K`u_6|9@XFiGp&yn&{BfVuaD$7>s() zluSipX;>)rH}zBbH^q)a_7b2l(Bg6F$P$`$cFWn%5+N-5ElxCCWaubDora5CO`)M) zY^|bp`hKD&@JfDRXqup+u(EPixIqOUa_qFUxQfU0$%n>;;h^eEV7IV=Qj*1LPmZPp zT8w685Kpe%1*Y!$qXmO$6iPH{Ky8!HZUg^`q#)8wOe61VeQ>p~T)Z_69AS!ynMz9j zx#b3qkOa?>099I(mO6Q0V^XVmCf~X+G7dFVZRQ= z1jjI*(v?}QTIc%XqLd|7ldC>CIXM6!oyXbeGiZT0{L1~QVLL|vJ)3S=jn{n(6-z2- zv-|AqED9>Bx6^H)1B%Ve1zYCmk+$5Obc^2T?*Mc|JVN z0>;}bmpUR*(4E0-!d5RASeTDCtEKJnd4A&J>Z$U!c*nLTCWUzkJT5pDgbeFby#a!w zA|RP!Pn@%E_yKXjm7z5iHd?9W8up-TP+`4&6v9i23jJeCU9(Lf1oCX?5RgH;&)gMq zGH`$Alqd-hYnq;QU5(UaLjy5Uk9()lx9NYX2#MMhy`|_=Q&X~q@)TKT)PA<8&{FY{ zph}lf(#&erR9BajG-}GJg;-RyJOu(#4xQXJ_dG(qFyM0Cx=E?lMDCrKn<8wshj!## zQ7E+>l8&50r(YXnphSZPcbbjPkMxtNp%H&8C!`}kDXH{qxuUU3c7?85n;yxqW!>CZ z@xJ$Kq(XOoq9;(-S>vNFKQ?$d-$h(Nlia|_hR;;ekPrx}WdEOQ3juX+Q(&lm>zl3%YdM|e`ui=Y4-+O z4wSms$OVki)RggifaGy>h4JnQ8oye+nJ^>hi@MH&+`NlvSU@uK@;gm>yXDl9hNG6Q zE~9$w`;#97gK%mEIB%F=d0Yc5pk2{J0*Te_^qKx{>BJTpLgMZ1*X5W%pGv1M+)3;& zOAU{NHR6!!KeR?u5s(yVPddUVcC7YBlyG22XQU)kFi?p7T}X_d%RmsxdLgd@Buca< zlQq_6ouh(^ge<(KT6ib~3jNTdG-n+r767V(3j%~S)Lp~@m`Z232sYeRGM|YYmvj0 zAkO^T8~s*=r|vB$dc>T>PdQ>UI(~0ubPA4c`u=lK%{dj;UmYZ3Ln5X#02$@2o^GJe zM2`RzP4Z{cFS9OgcPsSU)iQHtb|q756|5dB0@{n&)WWE z16RiX@J=-`+_{Uey}{Z@R_8z&D9JdW1fo4@Wba(&V9TIwm(}rHcx*4T9rjNNL~lxB z?xBTMu(;@~G72m*f|71mN^%ORALwVFHcp7{KaD>poGIextxHS$$@|#tGV&-$-ZHuu zhAZ(GlEMD6=^vYJR*;gBh#14yyOLlF$582YQR6H&BxlMTll`Pslw$f=(DBqs5_KUh zgPNdBTwweI1%*r3uFez?zzU4EHW=<%DL5F&*rNXm`MB6v8yn}+LBb>v;%@=ec|CGF zib~Law$Hh>3^-%Q2Zo4{A8takR=K{K_Qzh{+Uzs?EHq`=tflTg{9D@k-w@U*q_$Ic zql@BUjuXDyYXR?jaTnR^M{xSshS!DkqZQqYgO3_73fYe+zdJcEM}&ky3Gn&c;PJek z_I>{C(cW_K1T5QtpLw?rvWLU%x1$-ItmPig3Om*)Fq&NflYf+QC{>RsQWolSAJ4Hq zrCb4~F#)^TLx>AKl;m<;NfbI50&4A1G3{EekdlmtWbye# zHJWWSJBJ&7m9>P4TE}8Mf3Kq$;&DBFKGij`X(0{bueIlpSgz7$oGvPY&2H z&{EP84iC0C%`9^E8-u|p=xa1>aNrXC__%*@0v=;Kzs|OTz4!EdwxeyUOWljw11sKF zxZpz4_dd1=b%Vx`0QDle++VZ?Ubim&_}q}oNE|=gC|s}46Ic@ZPN^#HI67O}f7r(5 zsv_$vQvd}|leRJ=k~f$I8+)>Zl8)q-BEk+DJg}>a*wRwUK4<<|#~YY{n3$N;ma|7> zBeGE^yk3w7Pic+dcytJsr8!16s=sv-WFl#Q5;i^+1&Pbp06wCaYS-8E<8n+vo2}Ky ziBX!pu9@W5quE(i_xc8I&-0={Ug!DmV(E)bG8{)scek{gaLr9T*)B+Zc$cgFE$ZZ}EIRxN_|NsoM}3NW9Jw z;7lIP&N4SXMBn@#{~t75!_MJ%cQgy2Ve%Mk)#E5+2d1g{EP>;yZ3Ro6Tm1EUFMgAo z{TZ*R{mwW}pNESbomfI$l;4EdQ*1G1cY9}^)!xbKp*eSgj%F7f1ASDxzSJ4V9W*bL zQDgE#A(F@s*%^J*>T%f3+Dh5F%C2r*fM#AAq`oQc5b#bZj7J)JgNfKil$^1l$T&eD(yA z!;(?}l@j(ZaG!TW=8^o6si!(JH1fhrU0nVR@5#01+jqb5<}L0sh`^o9nk5O5SPVZ;ojy7pe;M(5+V{<9y&qxKX8gMd9OMGHhru*48nK_RPKqUd+K3&aMR?{Kr?ruqi zFu{_5qDHrD=SL59N22ppD(OL4=Tr4*RcDe>peE;P*WGs1!)c5qifU0sVM|3) zc2UBoBcwLxNMyi&B_y4Zh8WID)UWwb7FITR0?^8T!8XCEl z4-PD-2L@qf5`<8x)pQ9r0N=Sqibrj=Mv}R@9-rPZ0}&FZ4sCx@7S|?{VGQGUkXMMF zy*!M2ACRzaJf8ga{HMLj1D6bNo0-t8u>M%wh0j@gEb9$Id2i#8KtA%}q&z%8>9;-a z-xOfVn8lR4t>sQgM!XuNE5E9&K*RhWV0F)FS7#qJ2Sa;FgFMv4%u!0p!2^wp8Dg-jhmfJYqq`Rb-v%+2SbT6`WcTvE`_bLq-Y_Ro zLosL8zcDDv1#d6l+O;;fDIq?YWH7fosCyIomjRoCyg1>Dgrg&Di=ComaP_+o;rpa) zkgqUM*3MFpKSm#sohpG3#L5@fU0QKDuRuEm_gd}MHLxQ^M*;8_aH@*-k^v}qWfCM2 zsQ6+oLFu_A22ALt2R?uaJ)g_+=MJR7a(Tl^KLx4#=|X)<0&?Wed854BoSJvQU)Y)3 z=T7r~<-o>}_dxuAMdJT&w(FmqXxMLk@2=2+EfcWDY(9Ta{8+|a<)gWVWZBgh(9snKE<#Pe};!nU1aho z5Q-9HWGJi|Xj$}BgM^A)C0Kw!zfKR>=67HFgZ3^w0Be*DB9z-o^{w5m!FQ|jl3XA! ztZr28NR3Yk)oZw$cSo@Z<Jx0Cn%?n<7~un-HwV9@T1 zgU0K9VF3A^JFa`@;)Kr=9}NZ3P}GuY@Vp=tWmHGpEG9Omz3RjJ;(C0%WskQz1Yd?Z zPK(XWlzVzM-dK)QgRo*p3nGL`$U_s&fY&%*;`3f>F@3}J>!8!yINuaP4B1F8Adl7Zt+Tnqfo4&22Bu$Xbe*#GqX-^^NO>z7tFH1lfG%QSV zu9Pf3OG|FG#o~i)*0Pr&1){R1s*AK$Mpm?#(G&$Ulr|b>)hgCZGfi#h%cAqd-gRar z-V*Yt<}5WRJ)+wO_(PezaJ^Q~*F~9E0Z5LYZzSyeKzjUh<+u3B)knf|>YHP;4-Tx} zh7$r6?kDeUvEHImj6_651nu{YNPQTRmf5VtX}S79LPP|ZHoNyev=Ksp-Vz9R&(UQu z(93Hz9Ix*;g3GWNZ*laRIRhTBPk6!7{+HY+D5{oJRQWAXG`u0kM27Mt?|)6d3_%Z< zsEkOIPbvQ2xSeW7;=(E69aKS!NeI7#z}!tvscOi{jFT#&lhNLQonnG{xnFwUW(&@G zKJqteq~4TbX-y@-A3^EU`IWxOKt^8OaA;B#1Ij}{lfO08yVN&$UXu$hc#V&Zjt-14 zvroj{zhl_AG@M@@0mD@*ht|yaU}tJ+St{UrpJB1KojzjuLt<}tM`I-TW}!Lvy(yU( zd8!OyU>c_vXEL?l-Z_gQ;!JG%S3^ffrp#U|m+ou#sc+6uCHX)0=;53jb@3AiY3Zo~ zYClyRowoi&yhGl)z429ofkT9Lc5>cqX7LfU59c&!zeH}+)x}2=7U1KlBfk`Kdb%Ydt4P2=tk5^WnXp39{~ zMFG??#c0jNdECtuoA2GspYW4rG?b~4f}5|dw;}<)2=BGd#p|+k;1jS6&+Bs7EKj@7 z6yRkiK}lJOP#=I&1B7@{SGMGU)@CKj(FZe3wQ@-nkMZ7J5SBT4^~J?8dNR!Ao>T(KJB_|Z^p%l!7}_pX@MHt!B-#Sb zcj$iArK*RcP;0HODpq#-r2*fb#WRP8@xwGIa!>F z5GqD3;r40smoMh?zF+F>la^8nh;2T>1{S4a{;JLL-3X%ILmhWhBwxi&_E+h<+zUTeQ9nhIa&_#@x!%cvKanDcM)qjc*&_+IPa%gGY z8Sl>-lAl+W@c&WvmQh(pUAMOqk`f{yAt5E*AtjAScY}0?bceJ^cXxMpr*unqcXym^ z-1m9L8E1_5J$&E`4!O9lz5jc!wdVZI&`7@25?9!lF;UTnBeNM*IR(wd)$YqMt2Hk; z(CF#EzmcvMCFhVPL;;63P4Wk2O~t*gJysaWL?UbiufX5W!~t={5A$Of!FDKLkpsVD z(U&57Hg|8G4XZT+PzeCm73|}AzlKLb)(9x5@CwTMAkD3$ZmG21y13w76U@&St>3LR zTE?ytZ|PE)S4=}hEuLBeikxf%{fcQ*!x)U$=oDbSn~Td-oT{>nNSLVa*A(jQ?VZmc z7t)xKBrgKDC;lb0$cKEiQNHM1er;{ZQv>MNk_F=lEl$gXkIr*Ig{=|ssfS&SXNi2G zilz75f3)86tYMR%2TQ_mu~v4@UvfMDSpUs+A{#Q5l}?J?V^(jWg2>9dcb zT=kW6?)QlIxpT^@Z`NQlEz2W$Hd0rR?(k_s zU^t9Fo$oA;wsjkSTEa7+U2r&^#~e!Hn?xN{t&+F7I$<;%uvoH(f~R|PF33oRIyg64 zff>P_C7mai`_37szj=WJto(=wT|GVG+}DVW+-{G%SxX?)*mZYRUeK{iIij0wW(Fu+ z%;ub9KcidB^#zfS&lkLBr+GZ@+M{Bjq+lQVNC2DP+de?N%s)K@DNMe)3V$kwdAIaI z>_wRD^^1T2R2!$6I-1j?p3Y3l8vIsNW&w65TO&!PXeAW|&tnlM{h3?`HX!lb-Xg~J z;+I!Wz9t8c9nVy`a8G+Xp6$6l+V{GBeV_wPQuvBJD44$d)`M|Su&e7jfNxvXix%5! zDAz7kLEzi*yZx{?=lZi<=qxRzxu24MnvQI%pmgR=GqvIYZR&(>`~mVSz9p<`!9DM= zsavm247YTYTcqO`Wwzm|G9>X|A>XoS@~)SKy2V{9gF%lS(xM&ezd`|pZ_-fL!wZyD zZ`iiu>fR{VA>(qdtVXHoy1@n7u1_n2`2&EU=35iS`vxC<^i~*vgGch}!j5gIuRg5% zvNPLwKO8e$xx?AoBwk{t{=)W%^|Wqyk3ELdtYW^0&XfNb-&$dsh6vZvcu&<};YeVS^#n#j>7IAp37%n?u{EsU_+=N~8XPz=SQU zAS5cwML`ji*SEb)Od}00 zmr@SP6#;8P!9Z)WAKVNDQp-;OLea>?D7tC&LRQx{%jGkXbF)Y0y5t8(M_u-hEz46) z!YinwrRYy@r@Oz56f8jfw^9ldz|NeUmeQ06hATQj1_RHTI)Jwnh|uoqgP(h9OG6Dw zxn1Abr~#r4Jq-4PGipSF_s_y$8C(E$BaQxYIoc{CL{z%-Jc9Qrf}@d7CP<>Vp@ zsRlob-VAFrzUyyjV0W%>;7M15BXw4V9dRvoE`eat;Q^Am}W8evn65aG2=&hOf^&D_>A^9QDqZ%2JbEl+4p8lMeMp5vU$O#NUZLi9IJF(l%Eb8qu ztXVH@i`E)=e`w%Y15Tvg99Jh>^7rq(p>)IDfg}u=D-#|Z=TWQ~br`htjiH`HTfw39qR^zd zst&)x2;47*sA#CP%)PdnvwPd@tJdnD9z*)Rfp z;zW#%*{PJ(#eD`meG=K7u|5MG4U8*n0m-fG0jWP*I3-^T&0l}>@6|BT2vlqGE)+5z ze<#~em6bg~Seu8th#yeH=*`%X337~aIIe(ps`XI3iYiTY>7(~f6(t5+Oh`$Z!IX@! zDw@iv=%%D!j^hnbaBa|__f+V&)pn6jTn%1l`d?mkj-EvSQlJtTY%ougT} z>R%m2g46|a2c&;$vA@E*cL9HV_n}SA?(MP}5S|2FM6!wRiVF)rF=0>U2~W#Z zn){L~dvcxQ^PgUT0d-k513sgbrG^hG&nIwkl{Jnp57$m2@_3CIbNpEp7`_C!boKRr zSvTy~!NEQhdp}p%2cyM5vcGSDw_4tKY&8C(?W8CGw5x%1EZx&*V&;P1Un1l0JeN64d4E=-;ny#`^si+`57uzkBue3%IG>oOO+j5;Ab- z-&Spuf46UHJR|+U@}3zlc{YEqYJw$sb5TBeh#>xxf^sn zMT8Ciiu9^i}pc)0B(=?|aatV6W5m>ky9@$9Q zDsrFUg(^Lr=dT??OKS7OhWYpkf@{joOmm26!66{}oslyq4IIrHcxR_&M2DeqW)Etp z^uLK+9%YvNhePQg`?9)P& z2`k(=8f@T?2j`B%>(0pZ^jE7}b|;%&USu@cnc3F0dP@+^9>XiAj~v!jrKPcksp@_b zyo~;aQ~>N^dqfXGNc?R~hWkbxV>K$8&*R&B3lli^eFDGXErkAwQzD1+^&5=jg~a)K zV3W(qW>9x}*>cyKAO_B`=sKL!!6h_RfQtu{YPw1bW;2%yQrwC#>b=J zZEq8KBWPoHT845f&9BSMnS`pt zac`bppg~xK1n%MtK#C=avN^4~^yO66&>l5jBEO+Cb!nKw%O>>&FjM;@j@$D`l4%^f zJ;qf)ozHlBBS0`Au=v8q&TI?Ff+$yWu1M*0S95u9+2hw`UEfkWs5ResTpt2)zX9?+ zKY_Qv@*2M7X?u|C6BXKJ)~w@kW@Y5McbFHzIItdYmunf#SZt?7#7yHJ4xAA6GE~Go zRk#j9fT2xRmY%+T$xP|mj8{JiNuixOjNQ>}+w553ZlImv7IaYw;MAgQ43=J+advff z0@J$uH~d>=G@)?GG-`Iews>j&TZekK&<{ua?;dB)mePtSu@G;c4C-==@)mPUIIQg6 zidO+YPd<&~P`i9V^q|Sw##F{rE?N#PAc{InGT~MgeO<%pehV zZgijD`MzGl>y3@xc%y^E`NjUK&4c`34dcXLiXvaHYZaxotJZz6H$4!VxYbzSz})9{ z5#sv>Kl(i08|vN#6xFCpJQC)QE8{VNqDnI1Kjs_1r9IRu$6@ihfl2Wwqv9Dnyq;cW zh4txv;lQo!5dn?FOyymR)u?&1?m@rPA9hu3q9OcVsYh4ZwTMer{)~<?Cnia!V1m@~Vgt zcf4C^edNlO%Rkzy2}kS(qT|hh*k^HODs_1Uc|dU6QNpbIX!<-7A+_!So%NL4oFO*hNr6UUkzw{*! zhu5tfs}-_!e9t`-(^tc}goj#ZUa|Qxr5cb8N9%oTUF3cQHY`AOQ%^d$wJ{Pt^v@r< zOKO|(Aj+ZbAVf`)I5Xa1DpkyhoH%dl8S2oyE^TtcoTw{;!9{Jyvz>cHJ0{vSwSbO@ z9*UP@p$%-(eHfxS;4E2m?4;Z%Nn}-4myf#+cDaW*gsR}ll#&0m|{+0 zm@H7RySw8AEzVcg=ZPu>5=Lgy4P4;S+Z6W)@1#zRX$}3LUI;tXPAgJJMza3fjeqky7^=s8=5U7+uc~r!u4irNS4CPp_7nqx~;8FXZdbJ+FNI<#3dMzm^of$M+{8Z|myGjdY!C3$LEjao%A6k}@dcGhF zlF5+p>ss?w6B+ji3+Y)wGbRUek_x9zVt)BM>BUax2O57wOBCkD1ip*=WlunjFH$c9 zcLcWgY*c_b>4udjkC6}-r)R3Wyl+^LpO2VE0&5APS>A(w+e_i*1zZ~YvHMBOFE6A6 zjB5l{Wz9D3$wU1`Kl!dDP9o&UC#sA$@W|y_UJD#>I>5Wtwk-5qhwwJx77p%J%to=$ zwWMyhU)&``50lb%iA#ttH9tY&>Z6En3BO=FbiRwn+Tm>tH)J=deoM#7g5q{7i1`MW zhLDigml`>x{`@LYWN9U|cs72<{rGqV&L6-P?u)w8SM zub~}rALDVBDq4Ncr$d|7r<^hc>eJN|S7qYtzz+*?Em%kq6WXcH1luC)2)T?5fH z!8k1DWRSRuB@4Urd0fPY3+_~ul-6szGYwaG?Os%MwsXnu_GSvQib-@v(R#Li$w941 z^&O`zpDYW`b0fddsUW7#*%igYe2h5msJ0umnLa97_)162iLHGjpxo1vxK*-96MLKU zy}|8> z<*$S?@_KmQpth(*Rx4gUHB)<--Q@J;_HfPT>8>-JZZFYfTX3Ke|b*hUjn>Z`8 z%_2YcjUa*Hx5vc9n39>06jV+7chpPIu$$B=IDulw@M+n$+8{<8ChxwQe1X=zj zTTy+K4c-Xsl0*wTmxYrdyoRM&FO1IGyjKC&H8VAqi-P z2dTcQ%&M@mdct0`*lX5l?@ZVQ7WB(JOdVzPXyG=D7TI zzPs@trNQq3`N$V<7&%M%H05Qmy764w5Z*X9Z=&+=lK>qBmu5H;J=wHmr^(W`T)o!L zSw%=+RCo>pX{xI7Sn!;lK1=f|SQi_6rF|QnN$t+YL^7LjQOijGo}M0S7j5_cezGCM z_uN!xOaM8lg9Qh>#w#MhcPSZLp)s>7b zzcl!L_o+=(oboQZ=+5BRkDu=1NlnCnYS`2_Ml~QlAs6+O$Oglm^2>a_;pv!sy>*8@ zy^Meq_J|p4Ay-eemNWS%;p&z>O0|l)2?4#owGIUaColv~WQnHrc>%ARb`_Hxr5#mn z{qH?aL-?~(N|9|OHoD%}4L}`q1+WAP!z!PU^+ zBgyH`5`sZ|+#3@2&kOZut-x*~fj1*R{=;$tdMhcqc)C*i=YCAdB99F&!`UeU;>&X+ zybqIk{3faZN$dPgM!TAALdvVEDX1vE-@Pfx%)CBy z9jUMCCm7$_*gITc7Xc0=8^a2h$rrr={y(Di`r>0F5Af#~)U3|pSL2oN5;p9gKPoT= z^nVkv>9>Q5(xAslFGe}{_Kqmh`|=42c%4vQ`1sNjFZ*rDs*vvEt+1`#Hjy1uzQVxb z&|2pKDlxVX?tisXcTavRgwNd1Rv3YB48hripUW)W<@|H3-cuO@kXyxQ!fx#@=a$Vn z3Z7Fn$8W#z5Q~*#Zata5I#}jb&+PBXn;exZv5PC+w4^Yd_kVuev9oE4`5OC1FP!HY zS>W=S2ovg%^^$Qqjvg8tT^?wEB!97ZBBx#hC$LD$*b3~k;3k5K>^?uQFV}}1erc=v zwTY{!|LFxN$Xq-WL3a)bdqe z;EK)1@ZuVaC3Jn{a*E!URiI{zL)6*;E$u?}x@Dgb{E(i4>NhSg=W0$|4$o8op{lzt zab~*g)q?tdNOIGQmpPyj#5N(PaBKAqTOxl>IU$BMrwbHXa*rQHc$@cEA#COKUL+}u zlk!~aJf%f6)!Q>Lj1(B5`JX=PX@TkUeg5rb9IMHz(f3t~ZZokc8)fh-sjryL6qAmI z@+x8^lbh7Y&!*cB@+n>(!m)i_%m=u+d^X#z`=9Lt@rwwswfkxfuy*}d$=CPxoABOg zS`n1gr6wt;QC95LCd|&a4(WuzDT;d_7cu-m(Nf6Bcaw{CEURa({VYdmdA~j9Tnvq$ zOACuP>U!kBZ@9^IaUB!G?r0=GE8}IH@xP~q+n;^;;I19Y{o6>lDy2E286_P=hO2nRnZ(mNavadceU)a-qG@J?dhb! zxbFuF>#57|Bf5uFG}^U!U1<`ztH=0^oiHgp8TNNi6V}mwn-<7O-M>LWC4;N9c!4?y z7AX2C?G|P_Bd@3l!zOSO&CJjm7MIkp)r-Yu;ZENoE*I!5ez11Kw~2_c%#prpuGU$bR<$G(%E zlAJrb*|R^Uk3Zd#V%Yt9FtkR-?e_ZXNi)hKRZHym*BIzm16MDpuq5b)lR`JalN3>qEA>#N4}WTfNwcKOptn-9(w1RhwV|le*H2G4 zhKlvpd9UvTWI=2^y5DTnK(-+Wf35n}7-^i-p80+BrA&x(cK7gMoipb`G^pY}Ae|Dfx9G1hP2ZW#I9JNzgeVWqUxTtt>AKQ$&-GCZxs?5Q7Kl(hq>7WnPy^_3U? zkJoywf)@DhYzpotyVQY$j=OjIJR!qdm&2M3b9G5M?yWGfUES^8x#qx8z|D2$=(;(b zEG(%pQ4WWa6c(xL?IYY)#*0A4kzQt;caN8(qPTl1HExG$+r(i>+M=G&C%;f@f^qp! zfjB$O7-RmW&m}-?@>Js!!*P9as~7-3ose$)1hu9*IBUy3!7D4+Ul_LiBod4|Dc zm6t>MnnUKI$-_<-1oAQYu8aiU$0g9&XB{8f{=OI(-!6ZxYpgs+RPwiS>_PF@ZA;q+ zWI@^#E~pY{YU`-ealR;G5_czHp87$qlZFU|3rK(^YAqE8ckJmasYS5(qK1N>6&+;r z%>&b#FMYEr(zVx+lj^DDH%NV}8WGT4#Xc3=eF-GJ@qPx|Dqk;t>oC%_ zV)^*hyYN%1a=NPBpU%?FdVoaV+J@$`K~N8u=AGmx@%u(NRG`Nz9cEd&s>Vh_iNaGB z>c4&BPKA5b<55S+(y;}%8Vt|{TJH4rr-teG*owU*5yeLeU>7yIY9eMv`)(ZA;soT#{YG!XrNilFOPBjbm_0 zlf|@XZwJ&7=sy?~Bm;Dwz8D?bUwhz979%Ha`(m<} zIy!docbnY>hrAhC06dVcJ$n=pLdJ&5v+!`LJEx8#_Px~IF-K(Y@b;E?j6M` zh?am(iPC3px|DBv9BgITXuEdlwT0ZzSNioN0F+0%n}Fpe@pj?moj17XSt{|nI6oL| z9_PB>fV+@*ET^ivxZdjZ$Dg>YH5euLi`C{ECp61kSi+^{Op@XtKxHT@BI3gROhQu9 z&k#Pm=;@pALw}B*ZW|=u&(a#BEoE2M=dc(ZM=-dK+s07`O9ZCyFe0VMnd3&KSH6&K zHw7P`meFG(TjL_Q)#u3j7?&E6eQ-lCkZSNaz0}c|YzUR4q?8b~lE5=Z+QJ%}b60b* zAS>glpS9c93ETl;gvuuu;E~)kzr55UgFCTrv2W|F>D-=tiRaymXj`=!A=A4osw791 zi0gp{cih|>g6#;;8`)QK`>22reEvA&s=J%g;hn=&@Bj<=tQ7l2gTrcdKv>RZwohk> zH6>H7d4(i8b>tBNH7Q}Xwo&acnC57A@ zN_)H@>ie*<X!pS_*EH4V{!{Y(T_iQA&<>DAi+Rau$ z-)_ddtF5~c#PT%@qLk$8y@y{>+kknXS>J+tbsX6!@pGnlzofZ3yE+?trs{51za|NW9m< z_KfFCL3`r-4u>QmYDy;ikV?m!cXC`4lm<=s4UhrTGDwG$xtptEC}+%&kvNu#Vxpse zPo%^4x$Z(h5N%w%3!c~7#7zIVPxWj;4I{(`$73C5<+ zRBX`#Qr-OgrAwF$3~b}RJ$qcLjkBz*%>6>+eR4Wu%MxHNX)VSxMe*qZir4U|tTUrXdPJUu0HCPvB2O8@u~#L7Iu;jr31z4EY(i-#LL zs}kSNU2SXup)>@@$wP@XE*;Ta$NV?Lw=E`)7f5DJw+HwQ*8RqOP*rk|>C6D@_SLy0 z8pwh{Poe#^s)a+mK-Ia#NObDTbL#O)vS0B|!^UjM_^jpW<{CN_665^gi3d>}NusZt zgm_q`8g7Wak}{a5rp!} zu{DzTG6=hP$SrH7EV9db>1}V&R@uVxuyhHBtIE#kuuZ4mm99E`bx?@5E42$H{$DLKwYhJ@=!3cydJdq(IIH+f3g=;_CWC6vC25Cx! z+^8WWai-LURLnzKd+5pww6@JSzi`cB4t*NBu z;%Eh*-07+Y$@N$UNsa5G#E%RVpn!JL<|e&`dC}1wj5~jK_v7-1+pB)O#HCH^f}pg?ps=$737_$O zt`G|+Y)tmyg01pPNdNA7hm9$aQspB_LV{J6)(p_!W(|nmHeaRT1X!1qpoVHfp$V`d zo(BU2$@$@E+<;b@h#ua=e|iBkYox;nw9BwDhwUz4(i8{z&G1s-494H}D|tdY^ksK6m2YgvvE zPZ@-#yk_w1MApzZ?>!}IE;;aH^BxPT>;l@#%k)JQAxxHJA5e;L`{9a1OI%siHVUZ) zXg(op0J`bxyQ<=b`=O)unrA&0miI>oYse{E#zz;b?jt->@{g~SP5O9+R*21P)F7bP zWC&%#6-%Tc3E9T-ieLoA5MR+C>2(YMop9?38WhsXms`*b`Vo(uMiGReilCG|y!VVD z^%?E@X!&!`XQ06$r6e~l_cz%hhkS;5wA zXwRNh7RnJ~fd5bd0}2t<$jp%Or<7uf&+vpR(r=ax6&{U84?UjvkETNfuZ9W_+5A7> zSZT!f(5hQKQ3mLf8l6DLL)&odW%gf}hx93|?nr|WkAm26*d?~DirfS@Pf{1xQh z`a!%ak}tW*l|_XFSS5sq-#%w0uuzesK+nJt_a~pzRqUBSicbR8et{)j6fYr00=gjdLZhddVB8t|-bMtXx9mCT=?k zT~J*+MFK| zm@$~WApAuypNr}eBy{-GsFr)6yxBIcvbr<=31W@N^LDt{t4aGxVmu@K)*npvTDZr1 zf~Kp%fvRRGjRLIJI4ff zSI>{h_?zszIFhj!>_^A>-AYb`-I4mee)VeN#mmIBOgZt_kVvy`UTf9(62h`??Gm8! zv7o+zNim@fcdex2iu#P3Gq8$39jJk+I}pq;lLa*jWMPa(dv`J-j-!O4r%ji^5U^UpkG zmEF%D<$pk?>`I{AHUhq5KZoXhG(GE6>N%Ns^5oQyP%s3oO2h{6D3x{1${U z{z`r}p8=9>+7f&xDqW<8T54wzA_(8>ck`7R*A(aj{PEX;d_+mk6r>|T5Kbh1 z`aBk>yzgHt$*Dp9Pf}&<1`vt<=AdbS&WN+*wRTfbQ|EZo84?i|b#S-I<%weKTYC2o z#tF!vO|E``}pG08{&7U zmu>ll+YT)yHFK_g%y^6i0GM6uEvAWb3YhlEPoEd6otoXh9REaMoxu$*^E?C_8n|{#7Tlh_qpDZI z-iscXwq7^&Qz-sD!cPPi+d>VtqSD;j)qVM2D1_(zAlCd_OZiy1OgNJsv@$&q0sYZ) zP9TQGuN3+MJVml_;M$=(C@yjmz;(~a7T z`8TpO^R+Pjp4x<{qrlqZc?|X1KR{HC#eS?M;W1mPQ=`f8_c$9gFEO%(P!>G$fHP1H zFGQ_o{vKj_>U)J^gD+Sdufdl24`UUq4e;@|>RVIjv$!E5rTND?h`e~1oGUL7+_q7% zbg;p>!U(miuKCsi9wTEi;c{QU03NA&3ph>wUvG5B0|1x#mW5~Z-y0ZN1z)vK ze@)Q@gpW@oAU^JYTB8-zVH}==SeR^|0NRRQrGF#CfA5uBE`XMmW>3-p<0?2=qNe?M z7Z@A_WK5V3*;L*XyNRsSM3n3_&tDOu(w8&HAih}mVJ)-2GprIwOI@%=@NypbupKec!&6-ZUiLke_|j^XQ7(8_s~BM^gFEa@xfNbum%fX7GHCk# zflf{i!EPAYU~lXN9%%uWS?JE{tLR8#uUuuW-+RLP-BCIplP>Gu>?j~)}-Z-nP9ZzN%IfWf)$E71#1TakNJySjf<8I##)XkZYd!a>mS^Z?!U%C!V*;n3?oBXYd`AxzkmP!b6|X{xbkpfsmgZv4u}S-c5F`v^m^xO^&~;;Zx}Ql zr_+@4@*Bnm1psFZ3=++)qkq_#KFZ zz#gIASVvE6a&rHaA`wc825(g^APe~N-KUcYJ;7M|x~Vl$qrZXmGzC8t9YwB<3ritd~G) z??3{x2*0{**DQ!$HeGrg?gN-9rJ**W9AU&gWX~VaqQ5S-XFWe>NhDN6_OCovnC}#E zgltl&P4#{(fsNDG=<74M zL%n5;nVH0_#p+fYvu{6rY_f+VZKE`wzdc%h-ULd8f5A@z&v=7u6YQvyHSJ(teQI4Y zig+XzkQMjn0FeVAf+=Nq7~ieQX|33+>0(#!j6hvU4$66Vbu}CaS-^ZY5fTdrDnw|iE({eaS0J0h_KPJ zGkwW#1H2E;?Mom!q?3$Tlgs_h6d?f}8w17VSezG&!e*%$*%b}&9Dl8>@ziz?!Y=F1c&;DP$STh@#H~4M~jKP7ZI0- zPR9u~(#=)0EzaF$duhw;PsKAkE#FgRroak0<8$`4|Uq_ zNlZ4u$GP�UH$^()|wkEmyK}yuGg$_ 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 YO2>H>)dsf{fnPwnnuZ#cYOu)v0KJ$;F#rGn literal 208169 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�)JeRV)+{3|8eysR2%(gR7ml0>ohwg@ zA$eflRzpjQw3L&Z;YaIQT{PqG5owdBM>k(reG^ri3Yj7W#pvhaQZ~ByIpcgE_C_M5 zO@OH~^rx8P)vt@URMe88ksCp;7fMPLU%rl$YCht@!P-G@!F(|rx@)NWdXDFR@2C4b^Y96nH}+n8tzWE_lVNPH)@9%2{HdbS zfr2)2@tyH87IyKMI-&DraVkJL9iQEYj*Rl*+Q*pxpG*eH6>n^AO5H#&I|bWVT`wUe za}CnxVS3sxkk^zSebh&VfS~yYjL@Z|WPU9O$rXRxW7qvzHcf;OigB_de)%63@G~ba zjwMf1RX3REXLtAXJs?iRF@5H0)9&vb++2N>Z4HxDb7oJ!9Lo)U#vs`|%Y^k0NMh8|twPsl zQQG)6e9bW_Xq1rcwZBI#5C(LtEe8%GJ7pPge1Ta| zJ6U~CkCS10vpc0VZ|-6WFZyny&oq_l0CwO{PyFQ5j6q}N8aE|yHmFN}0$ zf;*xz>N0otRMF5%0K#d@*5re|GqbVqO|#C*;E)`Gm%g8s&3kDnT_hWG_wM)%azLAC zdpD9T*iqk}*!h9km_6Tbw)@+>#+sj|I~*D;iv#H?DefBP*I0`SD|fm~L8Iqm+jJ!? z0z4Hy>M0=z!O9&e4j~a9mL$}!e!=lMFkjZf2F+6ZFe&?^aQtU@%#$Qfp6__36NtDZ zRyY3Cd$y(*{=(hllu`D8|M*W}C**Kfm9=sA?K+%3{rQ>whEuH$fDYwS4O)&NAdM@$ zJLTz9t1nJ++8?$ST-Iga>z^6UscMfu{9 z6IADf^2S$nfu z?YBCPcx-gBgkzUa)s6JME=F*QNVz~KSKH5ooGdOEk53DaSJSY5A?~Aqc-WuU1bmj! zc9fv2K=Z-mB&^4QGIIa-y6So3ml>36N)l(yUtA|1uj0Y6ztm0FIOaJIz|YE*lVVIy z{@s=L@!8a$6O@aUTt|(eSriaVOjD$Qf;FceEbtK`FAK{m! zA|fp<3xY!j*N3t>fXP?+B5yrf1}on;Iy^i5K8IJLy_kz8L1gthxLz*UO_DbY2xwzu zEQ6QC+MCBjd%z|d81hV&! z!T=VNe{T*}B4}={X@LxHhKGCE{|JcfUf*))nakJzC? z(-ocP!ZvC!&v#k>epVSd-U%Nya70M*5(g23oScs~|9-S}Mih%EquzYGywCyrqR37%6b8d8 zM^wi^+enKTpTzlwWmb=Vy4L9ja9XOiop)yO8BIKkduBrn*TL+wDL-9bi)Y3T(A>3){%9O^SOewX_m> zN!miHYqJnl>pv-uJ8gefFn1R;R3?k9rP0W(Y3W=Y)sS`kUCU9fO9|kRGrcFCZ`oK9 z2Y^{+4tlP!(Vgg7wDdFFdgTe=?bsx;g|9Vh+VQ!NP;h{@^Tt@(cxmpv5xdob@$(@D zDzadrF~8da+~3rsnK9TZJ%92Gh-8!@T=xCPrv$7wR-?(9nlto_pe5JUe0I8_)w=+# zPWkxbtU(dWcx)7nr4_ZH*cfo7j&m+K{{*%fsv?tkrwOMXFyAz1z0Ef_NA-&dJQ)%0 z>FP(+(X%4Z=oS$pdw@EAiKKYvOU4(vqt6$s5~sM)G!6**8Ku$H0rkYj&vi7E+|~n4 z<2wp-Sty!lleFeFXq6>!h!4mp@Xl7$2jI7`kFbvcONMvmZ(8BLIl{{t_Yirii=U%| zACNKVSw`n=W&C{C$2&O*zvsxNtHf@`}4@*0&wwtc(S>!^Uor%*GEe@#*Ou31vH-z=^}K@+m+`U za1)pi8vRnaSJUG8BRfK-HpZy@|-TdA-jh^rfm=QiRIyY8%Uoe z9?~c2q$47~U;#u(qvL7-1k4f^C}N!PHB;O-@U~w^%<&d3DO-!j13*5);<$MmLX2K) zh5IKotY=25P$czjqma6E7SHm{8(BU~+ty2#!bEeOgVPSX8ddU#*ph$Cwrt^fg?pC~ ze@$9r)1ZgI9ZAaibI>Xq^LO*@%}y3a2I*g zb;sJ-Q-RlsIPkKXY99^@+;f1R$-XinvK=<(?2D{8T_YG!$VN{Wb5pl=79Z_nK+c6S zI9b~^9~9v&J}n#Ts$+=GB+JIjc~ zx#2t|TlHg}95S%cTUTW54Dk`Z0hbbW6o>UU;0CDMW35j$$WdO23g z!`Ij&B`cnDwFgCabbNr6ICDP5gYD;oPSe0Ss*NFLPfLWk{4cH$=_NoULU)IWn4hzA zo=@%}ea@e6R-bQoBM$71He_TYUf)@Jw2ZLkMH1&!k&fZ^;VBSgCvIDFVEtNuOV2mphEkrq;X+P<)!)Dn1UaNtQ0`h) zIHZqw5acwv+RET|ClaoI9n5L{d&0+j401{RU!;g>+Dti+>&;A0To>XHMacGPZaw3g zpgWsFr-^(TFz{_GGqzq06MWq7-eGWj=ks<{?0&M3{)dU2U#2pPgCR^A#x%KzPeffc zA_x+t=KM=0{9}u`zag=B9NtBA&`fZ0rLc`olv zfMFO4sN~)-N}^mRv@~xlNAqyD5K?kqfPu>O3kn9);9D|8ii}GG`SjfQESRQTrq%5h z8n;SA&Rv5u9~eS;>brfNTXK?lM^4-@NIsR&&xAu_$+^xBSlL0Q@8kjd$+;!tr_m~3 zk+LQ8tXC$8aX5=;ER~+^7Avj}RyJIR2KJQ8DqaT2LYtbob`0;=0vbcrVTEyIe*b8{ zpV_;p7=A6rM?dx)k=(sQ7}(VK@U(>G0%h+IF^?bmD&K$mLk3%9l>TQXyTh3w zZ9VZL{1qulK)Q&<(%?zJOQ!3!7h+80n9zG)v9t4glyFW;X6pg(N0Y>iO2dbd;?-l3 zO!Rn^T_w^{b2Yxr+2I0?y~1rROpzPjrcE=dHPwSj%OV;8vg1=r6LM-3NHQV#4+|)A zg8bsxqp^T89UvJ3A+Dghy#fuI8c~!2kMLW|*7UGC(W(ngU-$>x=%d$IH53DLy3y43veMOSUkri4 zBqhx5>-<0Z(-h`9c@%fMd;7Tf>2q&~I(JgE1+$KK50-03p?9sLpD06*H-RJ8(doq9 z-Q5{-w)LEVc-(Ri^mTA;j%+Oi#vr0Ur}ayTnU4BZMJ(Hyo;}w5TMzWTcx&efu4BtB zRCYS0d?Wa|3Rc&CvF_vhvdL1deZ``e=zjp(L>qVWZWTGE;3;leqPT{8?zny?yLvr+ z<7L|bpDow$<}BvZT%!s#^+mFHG_NPtf%jJjy=zgIr-nj~BSU@E$uh9Maq;oT^memg z@2f^)vaiHhk_OVaNizwcCZx?}eJB-UmL%rQOW|*(*wLMRC84l*gv_GGco5aACv166gr<3Q`c zfEazvm9--u2Kk`lHHzvhZ{92!t_jCiP`7+K z#8fHLE_>ig->v7T2l5gwvbmN#tIw&4g9M7lX?Q$cXe4uwD~E#<1};lN%w@Ypc&#h5 z4yqp!J8B*?Pd?zi{)bnSYc$pP0 z&jzO11aT-{X%&stqTR*u>VG0>B+g55;BV2K#1qbz>bBuHPowmhyp4F%=sSd|dJrO& z=Ehw+D5!1z2l;A#P??)nTPMhnKzsdYvjqeib9TZt9x!Muf_miOAXZmqPCcW2k1DQU zbIR!?Q4~I$#_yUOFXq?0fDdqX{TG<@AlZ9b+Ou6bTYR~%>V9Ub&FOg^?s^T;Hu%}b zp#WOo3VejQfl#MkO>1ESQeu{Zoc7L|+lR{OU|P=!?5=*MldyhtYp?exVM*_~8 z_ zuD>BuVZ=JjVMy`dho`j50-%67&m_@d&AymSIm$8&0ie2}bl$x3{DVoSK#bFik$xt3 zugyvzI04!|x$}Rk&~Dg?f2&Z0anU;{T}P~&vf(6RrEuW6QfH6yBCdi3P=p6GE|1OA zJOKG$u89w{KHey3=c6k4&Z4J)gCil&Ijh&m_avEaHil**yZ=7rmBg!Gz7QpC?*+j6 z^tZ;(L-|cg!dGs9i%)X;le7%r30}o?EZpAX*g4&w*3)I^FG`fY#1g++J05txtuGFN zeGI&F>$Ou|eO{Qv1h9IQE@z0~iGjSU|In_J7@reVYV1p}m17_lgkmM&>`ztfH92GG zOd91`QDDFRgCRFN7->7XepJl&#>z=dws;bhGXQAk+AezRHoj4bx4z7yjFu|YPP90{ zjzP+*uyReL0iJs`S>@-;;JH$%XHH-N&1C?0@=pZ%kx%~VQ%aJKkh4Iq+hwsdKZ&P= z%Y2ecerHw!Hspqdi&9NSS;UGmR7_EuXqQPkbHk>~!qjKNoB|V0HU@2quiE+Wq>-qj>1}-v z>51RE-cm%loS`t*L#tC)m{=-zT2Gg5+d3?Q(dzVA_KrOb6da5G{icHC$P2o_8QZDH z%)O}U&hcs8_o+c@<)8nf9^~M6!nB(G5ZzVe3_Cm5ouy2X`M*&~3burmM!RfsX-K?$ z`8{T^$idNpt?b9kUI0wXuBA#HjE+UYL6UZczok!N6fD>21QKF#hicoq2bX*efPa`s z95hLUe*wrl`cZl7>pToUjiHBQ1JJfR6+wLp*>l3k&l_8fyz-XYrEFu8rc4cRkQC$+ z1p*)iBKPqq(i;ueBiA6-{{=aI_sgwLs`;wG${!V4^vRL&S(F586En7HIM{+4x0U3O zI-*1yQqrcd0JWS-)r`+~+n54S-A_;YjrgRgVL2$ z^0KFWWH+oTT(6KF?Hq+W_EInF%)=#{KaA7?!=8bDkU((5^wRn72{FDxlKxxCvXo_t zm|+7V#&SCVZq?OW@Za5J>&jGngQG=Y?k8JlB$rDCL0c$dS!{T!C7!uA{^7UzJR`cj zw|>14tNNXXNZ+lPr_p%fWNe~nmVsIdQ7>KBDs5`ghQM-{T_e)UJym&nY2oRbZnf=Z z!pyZfWKl>|^98qvJ^rA%WYp+RRckHPN8H>Uie>iY#vkX^HNZkdQ$|rZkduu9-@~&l zhrh)cBlhr&23E(XhvAm~>9QDck-=1_A~O;vz!IlrDb1h^6Hif1@|Tw5QQw#i6(YZytX9&=BjK6beWXU zt~W{V>AwpP?Dcd6Zm{f z@6YlgB=nA?b8YM5H}J#M`pZsr6QtpE^%_7ryL;1>Qd(ONLgU+Yjo#hu&SWX#kG!#m zbJ%%<g{bu^~ z8tHJn5A74L)r$+#A25F>%D&C++4+-j9}fU=>kV3^5}-B%|{fKuv}H=Ha!Dv`WnpfCSp?u{S~bwz?vH8KG8Oe}rnLJYyC z%Z3JIDI6obeJ5ce@1}SUxhz=X+BN;w_2A$BS4_F}eQj(!Q83G~Ywpwjg0C3)$zf(& z^rlQ1&sWeut)PRQ^F+bnFnPTG6?Nh;heDs1%k{N;*>?vt)a%vy6FJ$`4|{Ed7FzWH ziE;?Rg@eB(>lY6`Sx9PV#-B8Xol@b&OCH7tva2Zf+daX=;Y{`ho?~{4F13KYC1%m zo+vBDealqPXzZjg z{*bZXz1D=NGfVF=@Q>#xk@&gwYWxsv_kbF6Qccj33 zq=MeR3Nx5mFv=MH;DR)mzOjz__c2xHbk=uP-{%0T(6_a!Sn)Wr z3L|Vr{C>R^?WxKmUhC7T2U>v3k@aNnx&OYBB~y%R*Zt``k6mJ-OdPook#Nv0baPLG z&fxm1-!;(nUdMTDb(NHqbYW3wQRvE#o-sDQ`=&p$ExGKNa(U*opJ4SE>h(+x4jA4P zz-eGNF`)JDSUKeabT!U0W9lO}7<33AEVI!39RR0TxJXE^{kyEq3t-$NCEPr8dz7p& zjZHsP&Gyk}si>-uz^__tYvrzaJ0Bfk7#ss&@6m%7xd|dS5epTI55QqBHayER^1sMZ znSEq6a0?DGbN5BD=KFcHzK%d1g1!1&cNdux_<-MGQ3|95|k~baeDA1-TQOqoCMT$ zG#5Hd-2U)d^R2JZFEe02 zeza%h^mT87EZPfC2L2CN82g_zntcEj8!s0Xy#JbNS8g;#e9By?LSY1x*jZouR*qMB zfMlV1AuV0oBeZrr!7`^*C4=)R8!;!sl-Zb*O)zF7e-_+uyl^|1641(fcjv1QLSBeF z)UfK%z0o$6Je&#g)Q`H`BOpc@!Fz7r%h=y<@gw)8W#GWz=I>S6I$RDiUragi9vP7Z zWl@_+mgo3iUjc@$bbiL`!r4{h=V{C_B!$BLGb^Kjli^+2-_omY&l+%?rjR80K%oH1 zJhkFG=^{TFmo#S6pK2vqFolY-h`K7j|+)A8e*Q@(ovAfGt7MZ_+^khwJSnak!GoN z#3j@z6wKootxJom$gMXV9`g#?_0>5MZ|^8#pyoZZSr85$-Et~pp>}B@XZSV($8L%| zo|-3~%}U??K!bLwl=-mB73M{Z9OG)OJinW7;tz+;Oq-0Sxs|yoPLB!Qe&a?k~Iyw4v_~vZiY4*Q6~#ArLxt%a=Wi+2igk3d?&mWe;{qW{uq*S}Qi&>3wSJ&F@``b=}mXs){LgR`- zO*P&cRNtaMBG%EZC_ODj)tO!W7Rwg&UHz5*OYQf^!SO3mmX{*AnS(Ebx;&HI5rA3C zSG5h_ruQMxI?eNK=l2*Sp!~SIFL=A^e+LvV-Od*L2&Qd6{QV0AcLX z?=r84R;R10!Kfz+9)UMZR9E$>*@r9Q9F9r|Cj74F8(f&Gnbl~QFu7Rlss7L@KGD;aFTXsYezMsbz-tR;Aq*d!nheuIB$!6Z?*Q>*~`P+)#rGxmSY^NK-EAA z_v0tD8au`$MhES_-srI^sdYJ z+!n%zRmzcYv8MU9=caO>kMFxH;n!Azd4gS~@~5wr{Z1pFiM^I1mGEa><;6QCSd3{k zj6c}gFwjjEYiSH?4pS@fbXY7szOB&~)zmRc69^oy9_>KL!Bb?*tW{L`6h8AOwFEw& z*Zb4P8EoqHai&2TzTixebgGAm~0@nINqVLwXS_%de~ z8VXnUVmC&CS<2ecX8C*;gHPwlg9-lz-NEhzaNHa|adC-Qtou*KgM3CtfONK^V>~1z zlp0_WW-==M)~CIY7tb!;Rpn!hJsxW!v%OswPgXfzqa}{tvI_HNXz3d4A8bzZB@M3A zYkfZ!TVA@=nyxP>D*9eDvp9%DLc)80S4{2;J*&?pYuWu+Os7h6aDuqNs)`Z$*fZEZ zk|&Ppw0K9pS5Z+;^*Nz49lEcXBf%c|l2q-B7yXu_N~g<-v9S|V|Iz1#>yS6%KqDp< zIMIwzGGlBp-{mfzUux2uVn#E;kOm$ZxJ==gAQ<8|cXij6Cno370MudE0AQc(NQ+u$!~! zb(E}NQSX6HSEHH;B>dlr(hV?FU5b@R4!YcEccFlESj795AMPWuLbBfuGk=XtaY}Y2 zJxdudL$uZNgzj^KM0@V!U;@y-{@8$Q%aN1*FsmNCMP8V@43SSYIG;@KUO)Lk1I21x z%~-~fa3fr$+c-aS_uR5m{diwrqeHpc$;kfC14H68sPgNvp2Yz5bEVeK|G1ng5Sm#M zub7j-;jp;oF}MC;-qUr*HQcTXwD580s-rP7BFnwkb(^eDSkK#W#X^z3NLhib{Y+Lc z&t299AG5Ib9#)eyEi7XSZ|@8sN{cJFK7`&ZtLSbe^NEFF?q!QvL3MJB7tYoX4=)!K zRabx$E!PDJ9hox=Xo_(haGL(f#SIW2uI1fyWM#C3=Bl%`K^>LO3tAoZA5R~>M9+U3 z@~u97*!guwS?xW);p40v<+e6<*0^%dP0jyGlloQ85^{}o=MOjO!bB^UcqB{*2ZtOk zJ6piwfQvxn)6-_RY+zW+sex>6PNCf=@abh8qwPy8UIN#X15Czf-ssO&2?t+#SfUh1 z(WVYiYYqk)@wS6wq)Oj4DugARh^Srn$x4C8DxFk3F36LsA-@NE^U)`W^$`zvs{g|j z#pgtR7xFa5wme(gOrA*nslF8F~6@r|1A;$q}hbckJ^fcHRn+0a3?_~gz1%kg4p zwrGEpLkl>U%?S|k+DY2_#s3#KBjoVEoNvsZOsr*IsGP!*YCY0e`YX7H_97tiG?A#t zRcQ_2;>RL024{`=VRaGyUQlv&6sX< zG4R%$q3+X)rb^x3?Psbypm;VPv%&g!d|E7HXKI`Z8@avHRc?d*+OYF?w8o@9> zX_{x;-GzeX7ac}{H*+6wEL|kF&!*3xGaiTSoI4$)o0)KWLCBH^&3|8Uh?*5U9?A7- z50h%=TOBIZrG;P$*j^{Ac%Ennzx>_(q-cO)rQQt5f78{&6-gwW<$M;X=6qR}9Jzc@ znbWdEOndLT$TWr!iI*wXQeIy{X*(32T8#UTW}mL7cPoqK{N^S)UV0h-->6o#3pvXy z>8o053t9Ua+;EK%F1dF+asqi(Q1~km>w^lteQ8|Z*Uf#aeQA`I&W28oDDNiBA7@%{ zgdOaJ?#7r_tQnBB&(ywKv?RmuGyLTbcOP_Ot7b1$*D1!c5hdWz%xE4ipIsHsS3aaa8nI3{!+GTl@dy};Bn^p6q zq=tgc)YLwdL&zeMrZic@zkaeCcmXPS8260&qZtoQ2scLTyG7 znl2d~vNZYT)nFEhy|*-K7H`PP;yT`!9jqiJibn~lnWcQO_H8T@RIjm;q3DVV)h;QXbYVEy*Dx^P2rB?NMguFu zoehDUyz04@Xznt_^AuJ~Hrvg3D;xa0%%{|0)rE@;+aI4^9ZZwQpWTl#!)JAx*8K3( zL0VXAA^}xoPd=Zp#Fq?(3Gn?Vyp9Un-a>Kf%H4`)xNzbj%@?zG{)3@aFisJbE97qr z?GfybVE7&&pllZsbPnL!S^@L2Fk&#i#wI$*YWBcMkJ~T(I=d=upOFe41Yt(g99pS0 zq~)Sx*kOwYbhme;asD=>p(E-vFIyOe>?y)Wd*W%YK#8VgJ z`&|OwwAr8(1JfDv0x*kC@fv!X7|2wW6)Vd(;O#!?c+N=D`~SrHbrT$m^ENt2G_6d# zAGv^>P=YS=?-z6e62`aXGg|~H*hy7%M^)miI$JvgSV)|o<+i_{w}6htc=QZyl!g35 z_46h)dEB+8yfkOL6woUbu;lT0lnGW&7v^Xg%j_ykPVA3g&GMp_k9-C|L>@ZE`S1g| zxh@=`Ak7lxwhHMVNn$mRe$J=-7^r5GvWOUOVzW6-P~$r5uA@-?J#PVb0W5&B00s7M zFEG|WSCgwj0o~aZLxLmJbQfflNb&JniNjDLKKz0mF`MrV^z0zjpLy1D|Nd?YncVqj zPGIHgG{qtHB?`uIhMOY=G(3<~@r`}C^H~j47=B^xH3Y!?|H*~qa)EcZ1`LEXhinY3 zD`>hFcg`uixRX2%cpM~qc{H4&WYtoGjGCq&*>g~g+IO%es_ql!h4GbxM`)Xy~ z%%8GHmzdbW8O>etUmRu2R-$-%0%F$p&)#z@s2a?*N)z#91oD2?NZvuaM9dClDiJruj%!my;;?yhtLu%{N!6-=J> zcxEZ8mGT?3UYTs4%}s$x+J|Pdc)k39y=p)Ic99!$fo7Wnuv!%dVZY*zk{KrP1HpSIiN&aZ=FhDtjxJwo zmdC#-FdvvG0E!1jFo_|pwR-ePg??MJPK~DUN|e|ozk@_)i9Pv=f{o_hXfPlzx_qd9 z^scxtn=k@SJ&s>}4A@)vo=_iwp{%vx+|6$!{{rw5_J2U&D(7r=-u#vZQD*9rx*wc^ z>R7S?I0ZFqRvV);O|-ostwey61|+b;?bGQlFN65xXGH_UQzy`fj}0MQ7HY9C;- z%L%%4lsjLCp2X)2WN-$$r-~y9M#UTXodeFB#z()kCn4?ktZBN8gF-sz*KU{qLQQ9U z_hBZ%1oQSXccqRk>@u%G$b| z@b4=@1F+3;8+lpKZm_M{JY}j_$* zpLH$ftW-n4uDw{zemdhw$fbNKt1Bli;qu;hf}ZodYhDA$8Tkq(-1yt@Z zdAbx|fZHau(k`Q#n@eVU}4&C|m*c!}j#KT1p( zCWl;|7m_&C8V=o^W2`-x_{qZ)8U6X@9Q=d$Qa~YDk3r|V=6(@=X&Gv4f9{>HGlrwj zVDqGy=@3z$%EUX^Gm_;{zm(4T{kfoivF~$ZrPoz`h4o{bp*;+V*~_t5(2L4>JjY_Ko?Lc+I%f{y>}zJ z%5FDs``fK3WEXvK*Q$tyOvGpB4?%8vR9>B6;#%l>J%viA!HTO?2J3;$f7x6+R)aj@ z#4N8A)a2Q6b~mD; z8K_ahRzDCzCOfcxYM6<GylBEs2r_uRHuu+6<$C4X%QBk)65yiizIpUo zg<0*Ccxi*I!C2$PgP*;24<}1)eyLoN&;8rs=*#s(B2?Xg0-FFgmFAa>w&tu&y&zwQ zqP^x^0!}eq{A4QL)XU9U^-jQdhjAQUTP$Z$18hPjg3;p+NdryY>%EY(bf~o-rq!g) z$!)n-r76(M01sy#O&AnfD zoy)z&iY_GKB}UoXUT-iz=2rWfIlx417Gh>taU%w zzL4Yrn7>3 z|A>(w5i--uk1)I@pKs0`sw7urC^&r5K?m%h@kP?++{(6G_|y1oB=T~Z{3MTralJB- zTN`%XEY#y-bqx6y3I$BVUt62z{f}6=;C;1IB=th7s93&o|J@y>?EIk38DX{~TMu_0 zzZW^@-1Wr!C>U(2H-Jnk@aDkyRO#et@ye5fHcp<6rP3GD+}KG`ozCw zeeH}STpf7+SK&c6sJWc(cCmTV6CQe_rN6wd!gVIO-`}n*OTt@dYqdzF1G(7`Ej# zUtpyf8%$nQzqz2m^@2PGR-t-&1~Is`#FNzw78!OG?cl|cpf?1^}c<{r! z(~QjutnOE_n}W?Z%KH8tjAN^j3s}hw*Q~0TI*XHppc1)lf6+oJM)htiJXuCrO*qNw zP}rOQuhSlX1L7{_7diaDlK-$C-vlt!LrZw&hHUs)f1P9%obWKbAWFO!8i?lFXNtTRCVNqhv1 zIEZvIqn0XpoQ&O@4ucB7U6=*%J1fnm(Mm?MW4OR16D@sm9Kr>fSHF9uvY8kX`?o0* zaQzE7eUt;JZt3E_t{(>OyMySUnJHG2 z5zvlZp$`+o7m_81~2`Cb^lD* z6rgjvXoZuk*LyoRl9x}1N!CAOTc12#ZyJ3G4v;nHY$xR_S8zEj_ELE~liu!MF4EYC zn)G<%9RrqZ^RNkWZL-&Bg0U7_y^w<=ABYqvH8K)a)hR!+zd%Sp;84hQVtE*t>L=>W zEL*Bxi=O&z(wYRr>Ulg7rSQB4-t!_hRP`nYXqFN6$*$$=XrpGXRsG%~A1znIC zKVlUQZL7ERE8N$f*Ft}bOD5^A637BnhBmYlm<&Ws@Q)ZwTv1(5JN+w(s!A|%hMp>4 zc6O_?i7xcgObmQL^lE))b(fld;ZN7%J!9HWqz)EJfKJ?XoFrZ8B??x}O^z_{+p@`o zN`TVi$qF=yUCOk?40Ynw;$^O4*n=Pb+b50u{IFYiKBH zC^Cgg-6F><0r=>8NMXr00+3lqgP+r z#u%)>0p=wFQ-M~5hHBD%g==Izrj6nycu|(*`K|^9ogDg`U@2&D9C^b>**`*}&rCqe zgWmLqE*dP2mH)7SzNpVtpL09%0DY}Svz19zwy1@{>ew}?qNm7GcTG9Np0X~lS~~xo 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

AB!n`hm9~9 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

Gp2vbC!{&YLBFf1# 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 delta 88 zcmV-e0H^=#&= 20u) + if ((IDR(GPIOC) & (1u << 13)) && now - last_edge >= 20u) presses++; last_edge = now; } @@ -141,7 +141,7 @@ int main(void) RCC_APB2ENR |= 1u << 0; /* SYSCFG */ (void)RCC_APB2ENR; /* PA5 an output (LD2); PA2, PA3 AF12 (LPUART1 to the STLINK-V3E); PC13 - * an input (B1, held high by the board's pull-up) */ + * an input (B1, held low by the board's R26 while released) */ MODER(GPIOA) = (MODER(GPIOA) & ~((3u << 10) | (0xFu << 4))) | (1u << 10) | (0xAu << 4); AFRL(GPIOA) = (AFRL(GPIOA) & ~(0xFFu << 8)) | (0xCCu << 8); MODER(GPIOC) &= ~(3u << 26); @@ -151,9 +151,9 @@ int main(void) LP_CR1 |= 1u; /* UE */ while ((LP_ISR & (3u << 21)) != (3u << 21)) /* TEACK, REACK */ ; - /* B1: EXTI13 on port C, falling edge (the Nucleo-64's button pulls down) */ + /* B1: EXTI13 on port C, rising edge (B1 joins PC13 to VDD) */ SYSCFG_EXTICR4 = (SYSCFG_EXTICR4 & ~(0xFu << 4)) | (2u << 4); - EXTI_FTSR1 |= 1u << 13; + EXTI_RTSR1 |= 1u << 13; EXTI_IMR1 |= 1u << 13; NVIC_ISER1 = 1u << (40 - 32); NVIC_ISER2 = 1u << (91 - 64); diff --git a/examples/nucleo-g474re-blink-serial/project.json b/examples/nucleo-g474re-blink-serial/project.json index b5df1535d..d3350c106 100644 --- a/examples/nucleo-g474re-blink-serial/project.json +++ b/examples/nucleo-g474re-blink-serial/project.json @@ -2,7 +2,7 @@ "schema_version": 1, "kind": "project", "name": "nucleo-g474re-blink-serial", - "description": "A NUCLEO-G474RE running firmware/main.c on its STM32G474RE (Cortex-M4F): the 24 MHz crystal X3 through the PLL to 170 MHz in range 1 boost, LD2 on PA5 blinking at 1 Hz from SysTick, the blue USER button B1 on PC13 (active low) counted through EXTI13's falling edge, and the STLINK-V3E's virtual COM port (LPUART1 on PA2/PA3 at 115200 baud) echoing what it receives in upper case. The board runs from its STLINK-V3E USB connector's 5 V.", + "description": "A NUCLEO-G474RE running firmware/main.c on its STM32G474RE (Cortex-M4F): the 24 MHz crystal X3 through the PLL to 170 MHz in range 1 boost, LD2 on PA5 blinking at 1 Hz from SysTick, the blue USER button B1 on PC13 (active high: MB1367 joins it to VDD) counted through EXTI13's rising edge, and the STLINK-V3E's virtual COM port (LPUART1 on PA2/PA3 at 115200 baud) echoing what it receives in upper case. The board runs from its STLINK-V3E USB connector's 5 V.", "policy": "electrical", "boards": [ { diff --git a/examples/nucleo-g474re-blink-serial/scenarios/blink.json b/examples/nucleo-g474re-blink-serial/scenarios/blink.json index e27821d01..91c45c775 100644 --- a/examples/nucleo-g474re-blink-serial/scenarios/blink.json +++ b/examples/nucleo-g474re-blink-serial/scenarios/blink.json @@ -3,7 +3,7 @@ "kind": "scenario", "name": "blink", "until": "2.2s", - "description": "The banner with SYSCLK as the RCC's registers give it and the flash size from the engineering bytes' FLASH_SIZE; LD2's 1 Hz blink from SysTick; a press of B1 through EXTI13's falling edge; text sent to the virtual COM port echoed in upper case.", + "description": "The banner with SYSCLK as the RCC's registers give it and the flash size from the engineering bytes' FLASH_SIZE; LD2's 1 Hz blink from SysTick; a press of B1 through EXTI13's rising edge; text sent to the virtual COM port echoed in upper case.", "inputs": [ { "at": "1.2s", diff --git a/tests/unit/test_analog.c b/tests/unit/test_analog.c index 69d922eaa..02d46e602 100644 --- a/tests/unit/test_analog.c +++ b/tests/unit/test_analog.c @@ -1445,6 +1445,10 @@ static void test_opamp_inverting(void) esk_engine_free(&e); } +/* the regulator's output resistance while it regulates (devices.c REG_ROUT): + * vout = vset - iout x ROUT */ +#define REG_ROUT_T 1e-3 + static void test_regulator(void) { esk_engine e; @@ -1454,9 +1458,9 @@ static void test_regulator(void) add_dev3(&e, "regulator", "U1", "{\"vout\": 3.3, \"dropout\": 0.3}", "vin", "vcc", "gnd"); add_dev2(&e, "resistor", "R1", "{\"r\": 33}", "vcc", "gnd"); engine_run(&e); - CHECK_NEAR(v_of(&e, "vcc"), 3.3, 1e-6); - CHECK_NEAR(obs_num(&e, "U1", "iout"), 0.1, 1e-6); - CHECK_NEAR(obs_num(&e, "V1", "i"), -0.1, 1e-6); /* the load current comes from the input */ + CHECK_NEAR(v_of(&e, "vcc"), 3.3 * 33.0 / (33.0 + REG_ROUT_T), 1e-6); + CHECK_NEAR(obs_num(&e, "U1", "iout"), 3.3 / (33.0 + REG_ROUT_T), 1e-6); + CHECK_NEAR(obs_num(&e, "V1", "i"), -3.3 / (33.0 + REG_ROUT_T), 1e-6); /* the load current comes from the input */ esk_engine_free(&e); /* dropout: 3 V in gives 2.7 V out */ engine_open(&e); @@ -1465,7 +1469,7 @@ static void test_regulator(void) add_dev3(&e, "regulator", "U1", "{\"vout\": 3.3, \"dropout\": 0.3}", "vin", "vcc", "gnd"); add_dev2(&e, "resistor", "R1", "{\"r\": 33}", "vcc", "gnd"); engine_run(&e); - CHECK_NEAR(v_of(&e, "vcc"), 2.7, 1e-6); + CHECK_NEAR(v_of(&e, "vcc"), 2.7 * 33.0 / (33.0 + REG_ROUT_T), 1e-6); CHECK_EQ(diag_errors, 0); esk_engine_free(&e); } @@ -1480,9 +1484,9 @@ static void test_regulator_negative(void) add_dev3(&e, "regulator", "U1", "{\"vout\": 5, \"dropout\": 1.1, \"polarity\": -1, \"quiescent\": 0.003}", "vin", "vee", "gnd"); add_dev2(&e, "resistor", "R1", "{\"r\": 50}", "vee", "gnd"); engine_run(&e); - CHECK_NEAR(v_of(&e, "vee"), -5.0, 1e-6); - CHECK_NEAR(obs_num(&e, "U1", "iout"), -0.1, 1e-6); - CHECK_NEAR(obs_num(&e, "V1", "i"), 0.103, 1e-6); /* the load and quiescent currents return through the input */ + CHECK_NEAR(v_of(&e, "vee"), -5.0 * 50.0 / (50.0 + REG_ROUT_T), 1e-6); + CHECK_NEAR(obs_num(&e, "U1", "iout"), -5.0 / (50.0 + REG_ROUT_T), 1e-6); + CHECK_NEAR(obs_num(&e, "V1", "i"), 5.0 / (50.0 + REG_ROUT_T) + 0.003, 1e-6); /* the load and quiescent currents return through the input */ esk_engine_free(&e); /* dropout: -5.5 V in gives -4.4 V out */ engine_open(&e); @@ -1491,7 +1495,7 @@ static void test_regulator_negative(void) add_dev3(&e, "regulator", "U1", "{\"vout\": 5, \"dropout\": 1.1, \"polarity\": -1}", "vin", "vee", "gnd"); add_dev2(&e, "resistor", "R1", "{\"r\": 50}", "vee", "gnd"); engine_run(&e); - CHECK_NEAR(v_of(&e, "vee"), -4.4, 1e-6); + CHECK_NEAR(v_of(&e, "vee"), -4.4 * 50.0 / (50.0 + REG_ROUT_T), 1e-6); /* an output pulled below its setting by another supply: the pass element cannot sink */ esk_engine_free(&e); engine_open(&e); @@ -1676,7 +1680,7 @@ static void test_regulator_board_rails(void) w = add_watcher(&e, "MCU", "btn", ESK_PULL_NONE); engine_run(&e); CHECK_NEAR(v_of(&e, "5v"), 5.0, 1e-9); /* held by the ideal source whatever the load */ - CHECK_NEAR(v_of(&e, "3v3"), 3.3, 1e-6); + CHECK_NEAR(v_of(&e, "3v3"), 3.3 - obs_num(&e, "U2", "iout") * REG_ROUT_T, 1e-6); CHECK(v_of(&e, "leda") > 1.6 && v_of(&e, "leda") < 1.9); CHECK(v_of(&e, "btn") > 3.29); CHECK_EQ(w->pins[0].sampled, ESK_L1); @@ -1686,7 +1690,7 @@ static void test_regulator_board_rails(void) -(obs_num(&e, "U2", "iout") + 5e-3), 1e-6); CHECK(esk_engine_advance(&e, 2 * ES_PS_PER_MS) == ES_OK); CHECK_NEAR(v_of(&e, "5v"), 5.0, 1e-9); - CHECK_NEAR(v_of(&e, "3v3"), 3.3, 1e-6); + CHECK_NEAR(v_of(&e, "3v3"), 3.3 - obs_num(&e, "U2", "iout") * REG_ROUT_T, 1e-6); CHECK(esk_engine_net(&e, "3v3")->island->steps < 100); CHECK_EQ(diag_errors, 0); esk_engine_free(&e); diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/gpio_exti/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/gpio_exti/scenario.json index 8aaf5b5f5..1f977c463 100644 --- a/tests/vendor/stm32cubeg4/nucleo_g474re/gpio_exti/scenario.json +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/gpio_exti/scenario.json @@ -3,7 +3,7 @@ "kind": "scenario", "name": "gpio_exti", "until": "1.2s", - "description": "GPIO_EXTI: EXTI15_10 on PC13's falling edge (B1 pressed: active low on the NUCLEO-G474RE) toggles LD2 in its callback, once per press.", + "description": "GPIO_EXTI: EXTI15_10 on PC13's falling edge toggles LD2 in its callback, once per press; on the NUCLEO-G474RE that edge is B1's release (B1 joins PC13 to VDD: active high, where the readme expects the press), so LD2 changes as B1 is let go.", "inputs": [ { "at": "200ms", @@ -35,7 +35,7 @@ "id": "dark", "between": [ "100ms", - "190ms" + "290ms" ], "probe": "led", "expect": { @@ -45,8 +45,8 @@ { "id": "first", "between": [ - "250ms", - "650ms" + "350ms", + "790ms" ], "probe": "led", "expect": { @@ -56,7 +56,7 @@ { "id": "second", "between": [ - "750ms", + "850ms", "1.15s" ], "probe": "led", diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/iwdg_reset/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/iwdg_reset/scenario.json index eb357b466..e856831a9 100644 --- a/tests/vendor/stm32cubeg4/nucleo_g474re/iwdg_reset/scenario.json +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/iwdg_reset/scenario.json @@ -3,7 +3,7 @@ "kind": "scenario", "name": "iwdg_reset", "until": "6s", - "description": "IWDG_Reset: LSI measured by TIM16's input capture (TISEL: LSI on TI1), the IWDG set to time out after 1 s and refreshed every 990 ms while LD2 toggles. B1's handler (on the release: the BSP takes B1 as a rising edge) turns LD2 off and stores a word at 0x00040001, which its comment calls unmapped; on the G474RE's 512 KiB that address is inside the flash's boot alias, so the store reaches the flash interface with PG clear and sets PGSERR without a fault (RM0440 5.3.9), and the program goes on refreshing the IWDG: no reset. (On a 128 KiB part, the example's first target, the address is unmapped and the hard fault lets the IWDG reset it.)", + "description": "IWDG_Reset: LSI measured by TIM16's input capture (TISEL: LSI on TI1), the IWDG set to time out after 1 s and refreshed every 990 ms while LD2 toggles. B1's handler (on the press: the BSP takes B1's rising edge, and B1 is active high) turns LD2 off and stores a word at 0x00040001, which its comment calls unmapped; on the G474RE's 512 KiB that address is inside the flash's boot alias, so the store reaches the flash interface with PG clear and sets PGSERR without a fault (RM0440 5.3.9), and the program goes on refreshing the IWDG: no reset. (On a 128 KiB part, the example's first target, the address is unmapped and the hard fault lets the IWDG reset it.)", "inputs": [ { "at": "2500ms", diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/project.json b/tests/vendor/stm32cubeg4/nucleo_g474re/project.json index 580203a2c..559278927 100644 --- a/tests/vendor/stm32cubeg4/nucleo_g474re/project.json +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/project.json @@ -2,7 +2,7 @@ "schema_version": 1, "kind": "project", "name": "stm32cubeg4-nucleo-g474re", - "description": "A NUCLEO-G474RE running one of STM32CubeG4's examples for it, built from ST's unmodified sources (tests/vendor/stm32cubeg4/run.py puts the image beside this file as sketch.elf), on its STLINK-V3E's USB power. The console is the STLINK-V3E's virtual COM port on LPUART1; LD2 is on PA5, B1 on PC13 (active low).", + "description": "A NUCLEO-G474RE running one of STM32CubeG4's examples for it, built from ST's unmodified sources (tests/vendor/stm32cubeg4/run.py puts the image beside this file as sketch.elf), on its STLINK-V3E's USB power. The console is the STLINK-V3E's virtual COM port on LPUART1; LD2 is on PA5, B1 on PC13 (active high: B1 joins it to VDD).", "policy": "electrical", "boards": [ { diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/pwr_stop0/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/pwr_stop0/scenario.json index 725edf779..2826bcbdf 100644 --- a/tests/vendor/stm32cubeg4/nucleo_g474re/pwr_stop0/scenario.json +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/pwr_stop0/scenario.json @@ -3,7 +3,7 @@ "kind": "scenario", "name": "pwr_stop0", "until": "11s", - "description": "PWR_STOP0: LD2 toggled from SysTick for 5 s at 170 MHz, then every port but C put in analog mode (LD2 dark) and Stop 0 entered by WFI with SysTick suspended; B1's press (a falling edge on EXTI13) wakes the part on HSI16, SYSCLKConfig_STOP brings the PLL back and LD2 toggles for 5 s more.", + "description": "PWR_STOP0: LD2 toggled from SysTick for 5 s at 170 MHz, then every port but C put in analog mode (LD2 dark) and Stop 0 entered by WFI with SysTick suspended; B1's press (a rising edge on EXTI13: the example sets it, and B1 is active high) wakes the part on HSI16, SYSCLKConfig_STOP brings the PLL back and LD2 toggles for 5 s more.", "inputs": [ { "at": "7500ms", From 6a7c208e629212eeb95a89bd388d6d4651eacce2 Mon Sep 17 00:00:00 2001 From: Junior Deogracias Date: Fri, 13 Nov 2026 02:48:36 +0100 Subject: [PATCH 09/10] STM32G4 DMA1, DMA2 and DMAMUX; the VCP follows PA2/PA3 stm32g4-dma: eight channels a controller, one item a request or memory to memory, table 89's packing, circular mode, HT, TC, TE and GIF, the bits locked while EN is set, a bus error's TEIF. stm32g4-dmamux: sixteen channels on the 115 request lines, synchronisation on an EXTI line or a channel's event (NBREQ, SOF), event generation, the four request generators (OF), DMAMUX_OVR. test_stm32g4 covers them; CubeG4's DMA_FLASHToRAM, LL DMA_CopyFromFlashToMemory_Init, UART_HyperTerminal_DMA and UART_ReceptionToIdle_CircularDMA run unmodified (24 examples). A board's console is the UART the firmware muxes onto its bridge's pins, as the wiring is: the NUCLEO-G474RE's VCP hears USART2 on PA2/PA3 as it hears LPUART1. An EXTI line SYSCFG gives another port sees the new pin's level at once (an edge when it differs). An analog island is still when its branch currents move by less than a nanoampere and a millionth (nodes keep their microvolt test): an LED warming and a ferrite bead's numerical ringing no longer keep a supply island stepping every quantum. The G474RE example: 9 s of CPU, was 33. --- CHANGELOG.md | 23 +- catalog/boards/nucleo_g474re/board.json | 68 +- catalog/mcus/st/stm32g474re/mcu.json | 25 +- core/analog/mna.c | 26 +- core/mcu/mcu.c | 44 +- core/mcu/mcu.h | 4 + core/mcu/models.c | 2 + core/mcu/stm32/adc_f4.c | 1 + core/mcu/stm32/dma_f4.c | 6 +- core/mcu/stm32/dma_g4.c | 736 ++++++++++++++++++ core/mcu/stm32/stm32.h | 11 + core/mcu/stm32/syscfg_f4.c | 25 +- core/project/loader.c | 3 + docs/STATUS.md | 27 +- docs/coverage.md | 12 +- tests/unit/test_analog.c | 5 +- tests/unit/test_stm32g4.c | 158 ++++ tests/vendor/README.md | 2 +- .../scenario.json | 21 + .../dma_flashtoram/scenario.json | 21 + .../uart_hyperterminal_dma/scenario.json | 52 ++ .../scenario.json | 47 ++ tests/vendor/stm32cubeg4/run.py | 4 + 23 files changed, 1246 insertions(+), 77 deletions(-) create mode 100644 core/mcu/stm32/dma_g4.c create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/dma_copyfromflashtomemory_init/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/dma_flashtoram/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/uart_hyperterminal_dma/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/uart_receptiontoidle_circulardma/scenario.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 94a7eabb6..175e822bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,12 +43,31 @@ versions follow semantic versioning. There is no release yet. NUCLEO-G474RE's option bytes), and an MCU model can choose the boot (`boot_pin`, `boot_system`: the G4's BOOT0 on PB8). - `tests/vendor/stm32cubeg4/run.py` builds STM32CubeG4's examples for the - NUCLEO-G474RE unmodified; 20 run under scenarios (GPIO, EXTI, the HAL's + NUCLEO-G474RE unmodified; 24 run under scenarios (GPIO, EXTI, the HAL's time base on TIM6, RCC's PLL moved between HSI16 and HSE, UART_Printf on LPUART1, four CRC examples, the Cortex-M4's privilege modes, process stack and SysTick, FLASH erase/program and fast program with their timing, the IWDG with and without a window, the WWDG, Stop 0, TIM1's PWM and output - compare toggle), in CI's linux-gcc job too. + compare toggle, DMA from the flash to the SRAM with the HAL and with LL, + USART2 and LPUART1 through DMA on the virtual COM port), in CI's + linux-gcc job too. +- Added `stm32g4-dma` and `stm32g4-dmamux` (RM0440 12 and 13): DMA1 and + DMA2's eight channels (memory to memory, table 89's packing, circular + mode, HT, TC, TE and GIF, the bits locked while EN is set, a bus error's + TEIF), DMAMUX's sixteen channels on any of the 115 request lines, their + synchronisation on an EXTI line or a channel's event with NBREQ and SOF, + event generation, the four request generators with OF, DMAMUX_OVR. +- A board's console is the UART the firmware muxes onto its bridge's pins + (`console.tx`, `console.rx`), not only the MCU's default unit: the + NUCLEO-G474RE's VCP hears USART2 on PA2/PA3 as it hears LPUART1. +- An EXTI line that SYSCFG gives another port sees the new pin's level at + once, an edge when it differs from the old pin's (STM32F4 and G4). +- Faster: an analog island counts as still when its branch currents move by + less than a nanoampere and a millionth of their value (node voltages keep + their microvolt test). An LED's current drifting by picoamps as it warms, + or a ferrite bead's sub-nanoampere numerical ringing between two + capacitors, kept a board's supply island stepping every quantum: the + NUCLEO-G474RE's example now runs in 9 s of CPU instead of 33. - The NUCLEO-G474RE checked against UM2505 Rev 7 and DS12288 Rev 6: U4 (STMPS2151STR) and LD4 in the STLINK-V3E's 5 V path, CN10 pins 35 and 37 on USART1 (the factory solder bridges), VREF+ on its own net through JP8 diff --git a/catalog/boards/nucleo_g474re/board.json b/catalog/boards/nucleo_g474re/board.json index 5eabe760d..d2edf67ae 100644 --- a/catalog/boards/nucleo_g474re/board.json +++ b/catalog/boards/nucleo_g474re/board.json @@ -2082,10 +2082,10 @@ }, "fidelity": { "functional": { - "claims": "Nets, ports, LD2 to LD4, B1, B2 and the jumpers as parts, as MB1367 D-01's schematic draws them; the STM32G474RE (U13) runs its firmware (see its description), its HSE the 24 MHz crystal X3 (HSEBYP clear, as on the real board) and its LSE the X2 crystal; its option bytes as ST ships the board (nSWBOOT0 0, nBOOT0 1: it boots its flash whatever PB8 is). The Arduino connectors carry UM2505's assignment (D0/D1 on PC5/PC4, USART1) and the morpho headers CN7 and CN10 every pin they bring out with the factory's solder bridges. The STLINK-V3E's virtual COM port is the session's console on LPUART1 (PA2/PA3) and a serial port on the host.", + "claims": "Nets, ports, LD2 to LD4, B1, B2 and the jumpers as parts, as MB1367 D-01's schematic draws them; the STM32G474RE (U13) runs its firmware (see its description), its HSE the 24 MHz crystal X3 (HSEBYP clear, as on the real board) and its LSE the X2 crystal; its option bytes as ST ships the board (nSWBOOT0 0, nBOOT0 1: it boots its flash whatever PB8 is). The Arduino connectors carry UM2505's assignment (D0/D1 on PC5/PC4, USART1) and the morpho headers CN7 and CN10 every pin they bring out with the factory's solder bridges. The STLINK-V3E's virtual COM port is wired to PA2/PA3: the session's console, and a serial port on the host, is whichever UART the firmware muxes onto them (LPUART1 on AF12, as CubeG4's BSP does, or USART2 on AF7).", "omissions": [ "the STLINK-V3E itself (sheet 7's U5, STM32F723IEK6): its USB enumeration (0483:374E), the mass-storage drag-and-drop programming, SWD and its NRST drive, LD1 (COM), its own supply (U7, D1 to D3); the session programs and debugs the board (ADR-031)", - "the VCP's bytes reach LPUART1 directly, not as frames on PA3", + "the VCP's bytes reach the UART on PA2/PA3 directly, not as frames on PA3, whatever line settings the host's terminal has", "the 41 solder bridges are fixed in their factory state as UM2505's table 12 and the schematic give them (PA2/PA3 on the VCP, PC4/PC5 on D1/D0 and CN10 pins 35 and 37, PB8 on D15 and CN7 pin 7, B1 on PC13, the crystals on PF0/PF1 and PC14/PC15 and not on the morpho headers)", "a single JP5 or JP8 shunt sits on one position only; the switches here can all be closed", "CubeG4's examples that take B1's falling edge (GPIO_EXTI and LL examples such as EXTI_ToggleLedOnIT_Init) act when B1 is released, as they would on the board: B1 is active high, their readmes say a press" @@ -2144,38 +2144,38 @@ "tests": [ "tests/*.json" ], - "i18n": { - "fr": { - "source": "a9ed9fef708f", - "description": "La NUCLEO-G474RE de ST (MB1367) : un STM32G474RET6 avec le quartz HSE X3 de 24 MHz et le quartz LSE X2 de 32,768 kHz, la LED utilisateur verte LD2 sur PA5, le bouton bleu USER, actif au niveau haut, sur PC13, le bouton noir RESET, la LED d'alimentation verte LD3, JP5 choisissant l'USB du STLINK-V3E, VIN, E5V ou un chargeur USB, JP6 (IDD) pour mesurer le courant du MCU, les connecteurs Arduino Uno V3 et les deux connecteurs morpho ST. Le port COM virtuel du STLINK-V3E est la console s\u00e9rie de la session sur le LPUART1 (PA2/PA3), et un port s\u00e9rie sur l'h\u00f4te (embsim serve --serial).", - "fidelity": { - "functional": { - "claims": "R\u00e9seaux, ports, LD2 \u00e0 LD4, B1, B2 et les cavaliers comme composants, tels que les dessine le sch\u00e9ma de la MB1367 D-01 ; le STM32G474RE (U13) ex\u00e9cute son micrologiciel (voir sa description), son HSE le quartz X3 de 24 MHz (HSEBYP \u00e0 0, comme sur la vraie carte) et son LSE le quartz X2 ; ses octets d'option tels que ST livre la carte (nSWBOOT0 \u00e0 0, nBOOT0 \u00e0 1 : il d\u00e9marre sur sa flash quel que soit PB8). Les connecteurs Arduino suivent l'affectation de l'UM2505 (D0/D1 sur PC5/PC4, l'USART1) et les connecteurs morpho CN7 et CN10 chaque broche qu'ils portent avec les ponts de soudure d'usine. Le port COM virtuel du STLINK-V3E est la console de la session sur le LPUART1 (PA2/PA3) et un port s\u00e9rie sur l'h\u00f4te.", - "omissions": [ - "le STLINK-V3E lui-m\u00eame (U5 de la feuille 7, un STM32F723IEK6) : son \u00e9num\u00e9ration USB (0483:374E), la programmation par glisser-d\u00e9poser sur stockage de masse, le SWD et sa commande de NRST, LD1 (COM), sa propre alimentation (U7, D1 \u00e0 D3) ; la session programme et d\u00e9bogue la carte (ADR-031)", - "les octets du VCP arrivent directement au LPUART1, pas comme des trames sur PA3", - "les 41 ponts de soudure sont fig\u00e9s dans leur \u00e9tat d'usine tel que le donnent la table 12 de l'UM2505 et le sch\u00e9ma (PA2/PA3 sur le VCP, PC4/PC5 sur D1/D0 et les broches 35 et 37 de CN10, PB8 sur D15 et la broche 7 de CN7, B1 sur PC13, les quartz sur PF0/PF1 et PC14/PC15 et pas sur les connecteurs morpho)", - "un seul cavalier JP5 ou JP8 ne tient que sur une position ; les interrupteurs ici peuvent tous \u00eatre ferm\u00e9s", - "les exemples de CubeG4 qui prennent le front descendant de B1 (GPIO_EXTI et des exemples LL comme EXTI_ToggleLedOnIT_Init) agissent au rel\u00e2chement de B1, comme ils le feraient sur la carte : B1 est actif au niveau haut, leur readme parle d'un appui" - ] - }, - "timed": { - "claims": "Comme le niveau fonctionnel.", - "omissions": [ - "comme le niveau fonctionnel" - ] - }, - "electrical": { - "claims": "Les chemins d'alimentation des feuilles 4, 6 et 7 de la MB1367 D-01 : le VBUS de CN1 (5V_USB_CHGR) par U4 (STMPS2151STR, son EN sur T_PWR_EN avec le tirage vers le bas de R8, mis au niveau haut comme apr\u00e8s l'\u00e9num\u00e9ration ; LD4 avec R1 sur sa sortie FAULT) vers 5V_USB_STLK et les broches 1-2 de JP5 vers +5V ; VIN (7 \u00e0 12 V) par U11 (LD1117S50, C41 et C38) et les broches 3-4 de JP5 ; E5V par les broches 5-6 ; 5V_USB_CHGR directement par les broches 7-8 ; U12 (LD39050PU33R, C36 \u00e0 C40) fait le +3,3V et JP6 (IDD) le porte vers VDD (C55, C45, C54, C42, C52) et VBAT (C53), vers VDDA par la ferrite L1 (C43, C44) ; VREF fourni par U14 (TL1431CL5T) et Q2 (BSR14) \u00e0 2,5 x (1 + R33 / R34) = 3,26 V avec R35, C51, C50 et C46, vers VREF+ par JP8 (broches 1-2, la position d'usine), C47 et la ferrite L2 (C48, C49). LD3 indique le +5V par R7 ; LD2 est commut\u00e9e par Q1 depuis le 3V3 \u00e0 travers R25 (510 ohms), sa base pilot\u00e9e par PA5 \u00e0 travers R29 (47 kohms) face \u00e0 R28 (100 kohms), si bien que le courant de LD2 ne vient pas de VDD ; B1 relie son n\u0153ud \u00e0 VDD, R26 (100 kohms) le tient bas, R27 (330 ohms) le porte vers PC13 o\u00f9 se trouve C35 (100 nF) ; C34 (100 nF) tient NRST bas \u00e0 la mise sous tension face au tirage interne du STM32 ; JP7 (non mont\u00e9) et R31 tirent BOOT0/PB8 vers le bas ; X3 (NX2016SA 24 MHz) et X2 (NX3215SA 32,768 kHz) sont les circuits \u00e9quivalents de quartz.", - "omissions": [ - "Q1 et Q2 (BSR14) sont le P2N2222A du catalogue, la m\u00eame puce dans un autre bo\u00eetier ; L1 et L2 la ferrite du catalogue (600 ohms \u00e0 100 MHz comme le sch\u00e9ma les nomme, sa r\u00e9sistance continue par d\u00e9faut) ; les valeurs motionnelles de X2 celles du quartz de 32,768 kHz du catalogue ; les condensateurs de charge des quartz (C56, C57, C58, C59) ne sont pas des composants", - "les condensateurs sont id\u00e9aux, sans ESR ni ESL, sauf C11 et C41 sur les entr\u00e9es de la carte (U5V, VIN), dot\u00e9s des 10 mohms d'un c\u00e9ramique : le sch\u00e9ma ne donne ni di\u00e9lectrique ni r\u00e9sistance s\u00e9rie", - "T_PWR_EN : la sortie du STLINK-V3E est remplac\u00e9e par une commande mettant l'EN d'U4 au niveau haut depuis 5V_USB_CHGR ; la n\u00e9gociation de courant d'U4 avec l'h\u00f4te (100 mA avant l'\u00e9num\u00e9ration, 500 mA apr\u00e8s) n'est pas mod\u00e9lis\u00e9e", - "la protection ESD (U6, U8, U9, U10) et les composants propres au STLINK-V3E de la feuille 7", - "le courant d'alimentation du STM32 : VDD ne porte que ce que pilotent les broches" - ] + "i18n": { + "fr": { + "source": "991592de95bf", + "description": "La NUCLEO-G474RE de ST (MB1367) : un STM32G474RET6 avec le quartz HSE X3 de 24 MHz et le quartz LSE X2 de 32,768 kHz, la LED utilisateur verte LD2 sur PA5, le bouton bleu USER, actif au niveau haut, sur PC13, le bouton noir RESET, la LED d'alimentation verte LD3, JP5 choisissant l'USB du STLINK-V3E, VIN, E5V ou un chargeur USB, JP6 (IDD) pour mesurer le courant du MCU, les connecteurs Arduino Uno V3 et les deux connecteurs morpho ST. Le port COM virtuel du STLINK-V3E est la console série de la session sur le LPUART1 (PA2/PA3), et un port série sur l'hôte (embsim serve --serial).", + "fidelity": { + "functional": { + "claims": "Réseaux, ports, LD2 à LD4, B1, B2 et les cavaliers comme composants, tels que les dessine le schéma de la MB1367 D-01 ; le STM32G474RE (U13) exécute son micrologiciel (voir sa description), son HSE le quartz X3 de 24 MHz (HSEBYP à 0, comme sur la vraie carte) et son LSE le quartz X2 ; ses octets d'option tels que ST livre la carte (nSWBOOT0 à 0, nBOOT0 à 1 : il démarre sur sa flash quel que soit PB8). Les connecteurs Arduino suivent l'affectation de l'UM2505 (D0/D1 sur PC5/PC4, l'USART1) et les connecteurs morpho CN7 et CN10 chaque broche qu'ils portent avec les ponts de soudure d'usine. Le port COM virtuel du STLINK-V3E est câblé à PA2/PA3 : la console de la session, et un port série sur l'hôte, est l'UART que le micrologiciel y multiplexe (le LPUART1 en AF12, comme le fait la BSP de CubeG4, ou l'USART2 en AF7).", + "omissions": [ + "le STLINK-V3E lui-même (U5 de la feuille 7, un STM32F723IEK6) : son énumération USB (0483:374E), la programmation par glisser-déposer sur stockage de masse, le SWD et sa commande de NRST, LD1 (COM), sa propre alimentation (U7, D1 à D3) ; la session programme et débogue la carte (ADR-031)", + "les octets du VCP arrivent directement à l'UART de PA2/PA3, pas comme des trames sur PA3, quels que soient les réglages de ligne du terminal de l'hôte", + "les 41 ponts de soudure sont figés dans leur état d'usine tel que le donnent la table 12 de l'UM2505 et le schéma (PA2/PA3 sur le VCP, PC4/PC5 sur D1/D0 et les broches 35 et 37 de CN10, PB8 sur D15 et la broche 7 de CN7, B1 sur PC13, les quartz sur PF0/PF1 et PC14/PC15 et pas sur les connecteurs morpho)", + "un seul cavalier JP5 ou JP8 ne tient que sur une position ; les interrupteurs ici peuvent tous être fermés", + "les exemples de CubeG4 qui prennent le front descendant de B1 (GPIO_EXTI et des exemples LL comme EXTI_ToggleLedOnIT_Init) agissent au relâchement de B1, comme ils le feraient sur la carte : B1 est actif au niveau haut, leur readme parle d'un appui" + ] + }, + "timed": { + "claims": "Comme le niveau fonctionnel.", + "omissions": [ + "comme le niveau fonctionnel" + ] + }, + "electrical": { + "claims": "Les chemins d'alimentation des feuilles 4, 6 et 7 de la MB1367 D-01 : le VBUS de CN1 (5V_USB_CHGR) par U4 (STMPS2151STR, son EN sur T_PWR_EN avec le tirage vers le bas de R8, mis au niveau haut comme après l'énumération ; LD4 avec R1 sur sa sortie FAULT) vers 5V_USB_STLK et les broches 1-2 de JP5 vers +5V ; VIN (7 à 12 V) par U11 (LD1117S50, C41 et C38) et les broches 3-4 de JP5 ; E5V par les broches 5-6 ; 5V_USB_CHGR directement par les broches 7-8 ; U12 (LD39050PU33R, C36 à C40) fait le +3,3V et JP6 (IDD) le porte vers VDD (C55, C45, C54, C42, C52) et VBAT (C53), vers VDDA par la ferrite L1 (C43, C44) ; VREF fourni par U14 (TL1431CL5T) et Q2 (BSR14) à 2,5 x (1 + R33 / R34) = 3,26 V avec R35, C51, C50 et C46, vers VREF+ par JP8 (broches 1-2, la position d'usine), C47 et la ferrite L2 (C48, C49). LD3 indique le +5V par R7 ; LD2 est commutée par Q1 depuis le 3V3 à travers R25 (510 ohms), sa base pilotée par PA5 à travers R29 (47 kohms) face à R28 (100 kohms), si bien que le courant de LD2 ne vient pas de VDD ; B1 relie son nœud à VDD, R26 (100 kohms) le tient bas, R27 (330 ohms) le porte vers PC13 où se trouve C35 (100 nF) ; C34 (100 nF) tient NRST bas à la mise sous tension face au tirage interne du STM32 ; JP7 (non monté) et R31 tirent BOOT0/PB8 vers le bas ; X3 (NX2016SA 24 MHz) et X2 (NX3215SA 32,768 kHz) sont les circuits équivalents de quartz.", + "omissions": [ + "Q1 et Q2 (BSR14) sont le P2N2222A du catalogue, la même puce dans un autre boîtier ; L1 et L2 la ferrite du catalogue (600 ohms à 100 MHz comme le schéma les nomme, sa résistance continue par défaut) ; les valeurs motionnelles de X2 celles du quartz de 32,768 kHz du catalogue ; les condensateurs de charge des quartz (C56, C57, C58, C59) ne sont pas des composants", + "les condensateurs sont idéaux, sans ESR ni ESL, sauf C11 et C41 sur les entrées de la carte (U5V, VIN), dotés des 10 mohms d'un céramique : le schéma ne donne ni diélectrique ni résistance série", + "T_PWR_EN : la sortie du STLINK-V3E est remplacée par une commande mettant l'EN d'U4 au niveau haut depuis 5V_USB_CHGR ; la négociation de courant d'U4 avec l'hôte (100 mA avant l'énumération, 500 mA après) n'est pas modélisée", + "la protection ESD (U6, U8, U9, U10) et les composants propres au STLINK-V3E de la feuille 7", + "le courant d'alimentation du STM32 : VDD ne porte que ce que pilotent les broches" + ] + } + } } - } } - } } diff --git a/catalog/mcus/st/stm32g474re/mcu.json b/catalog/mcus/st/stm32g474re/mcu.json index 1bdb4abc3..61ade1db5 100644 --- a/catalog/mcus/st/stm32g474re/mcu.json +++ b/catalog/mcus/st/stm32g474re/mcu.json @@ -644,6 +644,18 @@ "match": "CRC", "model": "stm32-crc" }, + { + "match": "DMA1", + "model": "stm32g4-dma" + }, + { + "match": "DMA2", + "model": "stm32g4-dma" + }, + { + "match": "DMAMUX", + "model": "stm32g4-dmamux" + }, { "match": "DBGMCU", "model": "stm32f4-dbgmcu" @@ -2178,9 +2190,9 @@ }, "fidelity": { "functional": { - "claims": "Cortex-M4F instruction execution (Thumb-2 with ARMv7E-M's DSP instructions, FPv4-SP, NVIC with 4 priority bits, SCB, SysTick on HCLK/8, DWT, the MPU with eight regions, lazy floating-point context stacking, semihosting); every register of ST's STM32G474 SVD at its address with its reset value and access type, corrected where RM0440, the CMSIS header or the HAL differ (tools/importers/stm32g474_regs.sh lists the corrections); the memory map (512 KiB of dual-bank flash, SRAM1, SRAM2 and the CCM SRAM at 0x20018000 and its alias at 0x10000000, the system memory, OTP, the engineering bytes with the unique ID, flash size and calibration values, both banks' option bytes, the FDCAN message RAM and the USB packet memory). RCC (rcc_g4.c): HSI16, HSE ready only as the board drives OSC_IN (a crystal without HSEBYP, a clock with it), LSI, LSE and HSI48, each ready its start-up time after it is enabled, LSE kept through every reset but a power-on one; the main PLL from HSI16 or HSE (M, N, P with PLLPDIV, Q, R and their enables), SYSCLK from HSI16, HSE or PLLR switched once ready (SWS), HPRE, PPRE1, PPRE2 and the timers' clock; what the system clock uses cannot be turned off, HSEBYP is kept while HSE is on, BDCR is written only with PWR's DBP and BDRST resets the RTC and TAMP; CIER, CIFR and CICR's ready interrupts; the kernel clocks CCIPR and CCIPR2 select for the U(S)ARTs and LPUART, I2Cs, LPTIM1, SAI1, I2S, FDCAN, the 48 MHz clock, the ADCs and the QUADSPI; MCO's frequency; the peripherals' clock enables (their registers read 0 and ignore writes while off, mcu.clock_gated) and resets; RCC_CSR's reset flags (PINRSTF, BORRSTF, SFTRSTF, IWDGRSTF, WWDGRSTF, LPWRRSTF, OBLRSTF) until RMVF; a VCO, PLL output or SYSCLK outside DS12288's and the voltage range's limits and too few flash wait states for HCLK are reported (mcu.clock_out_of_spec, mcu.flash_wait_states, RM0440 table 9). PWR (pwr_g4.c): the voltage ranges and range 1's boost mode (CR5.R1MODE) bounding SYSCLK, low-power run's REGLPF, the PVD (PVDO against VDD, or PB7 against VREFINT, on EXTI line 16); Stop 0 and Stop 1 (the core's domain's clocks stopped but the RTC's and IWDG's, HSE and the PLL off, an EXTI line's interrupt or event waking the part on HSI16), Standby (RAM lost but SRAM2 with RRS, the pins let go but the pulls CR3.APC keeps from PUCRx/PDCRx and the wake-up pins', a wake-up pin's edge of CR4's polarity, an internal wake-up, NRST or the IWDG ending it with a reset, SR1.SBF), Shutdown (SRAM2 lost too, left through a brownout reset), the option bytes' nRST_STOP, nRST_STDBY and nRST_SHDW. FLASH (flash_g4.c): KEYR's and OPTKEYR's unlock, double-word programming with SIZERR, PGAERR, PGSERR, PROGERR and WRPERR, fast programming of 256-byte rows with MISSERR, page and bank erases, EOP and the error interrupt, BSY for DS12288's typical times, a program running from the bank under operation stalled while the other bank reads on (read-while-write), the option bytes with their complements (OPTVERR on a mismatch) loaded at each reset, OPTSTRT and OBL_LAUNCH's reset, the WRP areas, BOOT0 from PB8 or nBOOT0 with nSWBOOT0 (a system-memory boot reported, mcu.boot_mode), ACR's wait states, prefetch and caches as the fetch timing. GPIO (gpio_f4.c): MODER, OTYPER, OSPEEDR, PUPDR, IDR, ODR, BSRR, BRR, LCKR's lock, AFRL/AFRH choosing among io.alternate's functions, converted from ST's open pin data; SYSCFG's EXTICR, MEMRMP's boot remap and SCSR's CCM SRAM erase; EXTI (exti.c) in two banks: the configurable lines' edges, SWIER, PR, IMR and EMR, their interrupts by line, the direct lines as events. USART1-3, UART4-5 and LPUART1 (usart_v2.c): 7, 8 or 9 bits with parity, the stop bits, MSBFIRST and DATAINV on the line, PRESC and the kernel clock, OVER8, an LPUART's 256 x clock / BRR; TEACK and REACK, the 8-frame FIFOs with their thresholds and flags, TXE/TC, RXNE, ORE (or OVRDIS), PE, FE, IDLE, CMF, RTOF, break and LIN's LBDF, mute mode, nCTS and nRTS, DE for RS-485, SWAP, half-duplex, the synchronous master's CK, wake-up from Stop on HSI16 or LSE, DMA requests, every interrupt; the frames on the TX pin's waveform and decoded from the RX pin. The timers (tim.c, the F4's IP: time base, output compare and PWM, input capture with filters, complementary outputs with dead time and break, the slave modes and encoder, TRGO) with TISEL's internal clocks on TI1 (TIM16 and TIM17: LSI, LSE, HSE/32, MCO; TIM5: LSI, LSE; TIM15: LSE), DBGMCU's freeze bits by name; the programmable CRC (crc.c: POLYSIZE, POL, INIT, REV_IN, REV_OUT); the IWDG with its window (WINR) and the option bytes' hardware start and Stop/Standby freeze, the WWDG with WDGTB's three bits (wdg.c); DBGMCU's IDCODE (0x469) and freeze registers.", + "claims": "Cortex-M4F instruction execution (Thumb-2 with ARMv7E-M's DSP instructions, FPv4-SP, NVIC with 4 priority bits, SCB, SysTick on HCLK/8, DWT, the MPU with eight regions, lazy floating-point context stacking, semihosting); every register of ST's STM32G474 SVD at its address with its reset value and access type, corrected where RM0440, the CMSIS header or the HAL differ (tools/importers/stm32g474_regs.sh lists the corrections); the memory map (512 KiB of dual-bank flash, SRAM1, SRAM2 and the CCM SRAM at 0x20018000 and its alias at 0x10000000, the system memory, OTP, the engineering bytes with the unique ID, flash size and calibration values, both banks' option bytes, the FDCAN message RAM and the USB packet memory). RCC (rcc_g4.c): HSI16, HSE ready only as the board drives OSC_IN (a crystal without HSEBYP, a clock with it), LSI, LSE and HSI48, each ready its start-up time after it is enabled, LSE kept through every reset but a power-on one; the main PLL from HSI16 or HSE (M, N, P with PLLPDIV, Q, R and their enables), SYSCLK from HSI16, HSE or PLLR switched once ready (SWS), HPRE, PPRE1, PPRE2 and the timers' clock; what the system clock uses cannot be turned off, HSEBYP is kept while HSE is on, BDCR is written only with PWR's DBP and BDRST resets the RTC and TAMP; CIER, CIFR and CICR's ready interrupts; the kernel clocks CCIPR and CCIPR2 select for the U(S)ARTs and LPUART, I2Cs, LPTIM1, SAI1, I2S, FDCAN, the 48 MHz clock, the ADCs and the QUADSPI; MCO's frequency; the peripherals' clock enables (their registers read 0 and ignore writes while off, mcu.clock_gated) and resets; RCC_CSR's reset flags (PINRSTF, BORRSTF, SFTRSTF, IWDGRSTF, WWDGRSTF, LPWRRSTF, OBLRSTF) until RMVF; a VCO, PLL output or SYSCLK outside DS12288's and the voltage range's limits and too few flash wait states for HCLK are reported (mcu.clock_out_of_spec, mcu.flash_wait_states, RM0440 table 9). PWR (pwr_g4.c): the voltage ranges and range 1's boost mode (CR5.R1MODE) bounding SYSCLK, low-power run's REGLPF, the PVD (PVDO against VDD, or PB7 against VREFINT, on EXTI line 16); Stop 0 and Stop 1 (the core's domain's clocks stopped but the RTC's and IWDG's, HSE and the PLL off, an EXTI line's interrupt or event waking the part on HSI16), Standby (RAM lost but SRAM2 with RRS, the pins let go but the pulls CR3.APC keeps from PUCRx/PDCRx and the wake-up pins', a wake-up pin's edge of CR4's polarity, an internal wake-up, NRST or the IWDG ending it with a reset, SR1.SBF), Shutdown (SRAM2 lost too, left through a brownout reset), the option bytes' nRST_STOP, nRST_STDBY and nRST_SHDW. FLASH (flash_g4.c): KEYR's and OPTKEYR's unlock, double-word programming with SIZERR, PGAERR, PGSERR, PROGERR and WRPERR, fast programming of 256-byte rows with MISSERR, page and bank erases, EOP and the error interrupt, BSY for DS12288's typical times, a program running from the bank under operation stalled while the other bank reads on (read-while-write), the option bytes with their complements (OPTVERR on a mismatch) loaded at each reset, OPTSTRT and OBL_LAUNCH's reset, the WRP areas, BOOT0 from PB8 or nBOOT0 with nSWBOOT0 (a system-memory boot reported, mcu.boot_mode), ACR's wait states, prefetch and caches as the fetch timing. GPIO (gpio_f4.c): MODER, OTYPER, OSPEEDR, PUPDR, IDR, ODR, BSRR, BRR, LCKR's lock, AFRL/AFRH choosing among io.alternate's functions, converted from ST's open pin data; SYSCFG's EXTICR, MEMRMP's boot remap and SCSR's CCM SRAM erase; EXTI (exti.c) in two banks: the configurable lines' edges, SWIER, PR, IMR and EMR, their interrupts by line, the direct lines as events. USART1-3, UART4-5 and LPUART1 (usart_v2.c): 7, 8 or 9 bits with parity, the stop bits, MSBFIRST and DATAINV on the line, PRESC and the kernel clock, OVER8, an LPUART's 256 x clock / BRR; TEACK and REACK, the 8-frame FIFOs with their thresholds and flags, TXE/TC, RXNE, ORE (or OVRDIS), PE, FE, IDLE, CMF, RTOF, break and LIN's LBDF, mute mode, nCTS and nRTS, DE for RS-485, SWAP, half-duplex, the synchronous master's CK, wake-up from Stop on HSI16 or LSE, DMA requests, every interrupt; the frames on the TX pin's waveform and decoded from the RX pin. The timers (tim.c, the F4's IP: time base, output compare and PWM, input capture with filters, complementary outputs with dead time and break, the slave modes and encoder, TRGO) with TISEL's internal clocks on TI1 (TIM16 and TIM17: LSI, LSE, HSE/32, MCO; TIM5: LSI, LSE; TIM15: LSE), DBGMCU's freeze bits by name; the programmable CRC (crc.c: POLYSIZE, POL, INIT, REV_IN, REV_OUT); the IWDG with its window (WINR) and the option bytes' hardware start and Stop/Standby freeze, the WWDG with WDGTB's three bits (wdg.c); DMA1 and DMA2 with DMAMUX (dma_g4.c): eight channels each, one item a request or memory to memory, PSIZE and MSIZE packed and unpacked as RM0440's table 89 gives, PINC, MINC, circular mode, HTIF, TCIF, TEIF and GIF with their interrupts, the bits locked while EN is set, a bus error clearing EN until TEIF is cleared; DMAMUX's sixteen channels taking any of the 115 request lines (DMAREQ_ID), synchronisation on an EXTI line or a channel's event (SE, SPOL, SYNC_ID, NBREQ, SOF), event generation (EGE), the four request generators (SIG_ID, GPOL, GNBREQ, OF) and DMAMUX_OVR; DBGMCU's IDCODE (0x469) and freeze registers.", "omissions": [ - "the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, DMA1, DMA2 and DMAMUX, the I2Cs and SPIs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC", + "the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, the I2Cs and SPIs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC", "the timers' G4 additions: OCxM's fourth bit (retriggerable one-pulse, combined and asymmetric PWM), SMS's fourth bit (combined reset and trigger, the extended encoder modes), the internal trigger inputs ITR4 to ITR10 and TS's fifth bit, MMS's fourth bit, channels 5 and 6, dithering (DITHEN: ARR and CCRx read as their 16 integer bits), UIFREMAP, the encoder index (ECR), the asymmetric dead times (DTR2), break 2, the comparators on TISEL and AF1/AF2's break sources, the G4's ITR interconnection table (the F4's is used)", "the start-up times, flash times and PVD thresholds are DS12288 Rev 6's typical values (HSI16 0.8 us, an HSE crystal 2 ms, LSI 80 us, LSE 2 s, HSI48 2.5 us, the PLL's lock 15 us; a double word 81.7 us, a fast row 1.91 ms, a page erase 22.02 ms, a bank erase 22.13 ms; the PVD's thresholds), not their spread between parts or their dependence on temperature", "RCC: the clock security systems (CSSON, LSECSSON: the oscillators never fail), LSEDRV, HSITRIM and HSI48CAL's effect on the frequencies, the CRS's trimming, a peripheral held in reset while its *RSTR bit stays set, the brownout reset (BORRSTF only at power-on), the sleep-mode enables (*SMENR), MCO and LSCO on their pins", @@ -2189,7 +2201,7 @@ "USART: noise detection (NE never sets, ONEBIT does nothing), auto baud rate detection, TXINV and RXINV, DE's assertion and deassertion times (DEAT, DEDT), the synchronous slave, smartcard and IrDA modes, TCBGT", "SYSCFG: SWPR's write protection of the CCM SRAM, its erase time, the parity errors CFGR2 reports; EXTI: the internal lines' sources but PVD's; GPIO: EVENTOUT, the I/O compensation, the 5 V tolerant pins' clamps", "the I/O thresholds are DS12288's typical characteristics (0.39 x VDD - 0.06 and 0.49 x VDD + 0.26, 200 mV of hysteresis, 40 kOhm pulls), not the guaranteed 0.3 and 0.7 x VDD; the output resistances and edge rates are the F446's", - "DBGMCU's REV_ID 0x2001 (revision Z: which revision a board carries varies, UM2505 10.1); a halted core draws its sleep current" + "DMA: the arbitration's delays and the bus matrix's timing (a request is served at once, a memory-to-memory item every two cycles), the DMAMUX inputs' two-cycle filter and the three cycles a CxCR or RGxCR write masks them for, the byte and half-word lanes duplicated for an APB peripheral that ignores the size, LPTIM1_OUT as a trigger and synchronisation input (LPTIM1 is not modelled)", "DBGMCU's REV_ID 0x2001 (revision Z: which revision a board carries varies, UM2505 10.1); a halted core draws its sleep current" ], "validation": [ "repo:tests/unit/test_stm32g4.c", @@ -2235,13 +2247,13 @@ }, "i18n": { "fr": { - "source": "02c6b848b5e0", + "source": "bf0e43b70618", "description": "STMicroelectronics STM32G474RE : un Arm Cortex-M4F jusqu'à 170 MHz avec MPU, 512 Kio de flash à double banc, 128 Kio de SRAM (80 Kio de SRAM1, 16 Kio de SRAM2, 32 Kio de CCM SRAM), ses accélérateurs mathématiques, son timer haute résolution et sa chaîne analogique, en LQFP64 ; le MCU de la NUCLEO-G474RE.", "fidelity": { "functional": { - "claims": "Exécution des instructions Cortex-M4F (Thumb-2 avec les instructions DSP de l'ARMv7E-M, FPv4-SP, NVIC à 4 bits de priorité, SCB, SysTick sur HCLK/8, DWT, la MPU à huit régions, l'empilement paresseux du contexte flottant, le semihosting) ; chaque registre du SVD STM32G474 de ST à son adresse avec sa valeur de reset et son type d'accès, corrigé là où le RM0440, l'en-tête CMSIS ou la HAL diffèrent (tools/importers/stm32g474_regs.sh liste les corrections) ; la carte mémoire (512 Kio de flash à double banc, la SRAM1, la SRAM2 et la CCM SRAM à 0x20018000 et son alias à 0x10000000, la mémoire système, l'OTP, les octets d'ingénierie avec l'identifiant unique, la taille de la flash et les valeurs d'étalonnage, les octets d'option des deux bancs, la RAM de messages des FDCAN et la mémoire de paquets de l'USB). RCC (rcc_g4.c) : HSI16, HSE prêt seulement si la carte pilote OSC_IN (un quartz sans HSEBYP, une horloge avec), LSI, LSE et HSI48, chacun prêt après son temps de démarrage une fois activé, LSE conservé à travers tout reset sauf la mise sous tension ; la PLL principale depuis HSI16 ou HSE (M, N, P avec PLLPDIV, Q, R et leurs activations), SYSCLK depuis HSI16, HSE ou PLLR, basculé une fois prêt (SWS), HPRE, PPRE1, PPRE2 et l'horloge des timers ; ce qu'utilise l'horloge système ne peut être éteint, HSEBYP est conservé tant que HSE est allumé, BDCR n'est écrit qu'avec le DBP du PWR et BDRST réinitialise le RTC et le TAMP ; les interruptions de disponibilité de CIER, CIFR et CICR ; les horloges noyau que sélectionnent CCIPR et CCIPR2 pour les U(S)ART et le LPUART, les I2C, le LPTIM1, le SAI1, l'I2S, les FDCAN, l'horloge 48 MHz, les ADC et le QUADSPI ; la fréquence du MCO ; les activations d'horloge des périphériques (leurs registres lisent 0 et ignorent les écritures quand elle est coupée, mcu.clock_gated) et leurs resets ; les indicateurs de reset de RCC_CSR (PINRSTF, BORRSTF, SFTRSTF, IWDGRSTF, WWDGRSTF, LPWRRSTF, OBLRSTF) jusqu'à RMVF ; un VCO, une sortie de PLL ou un SYSCLK hors des limites du DS12288 et de la plage de tension, et trop peu d'états d'attente de la flash pour HCLK, sont signalés (mcu.clock_out_of_spec, mcu.flash_wait_states, table 9 du RM0440). PWR (pwr_g4.c) : les plages de tension et le mode boost de la plage 1 (CR5.R1MODE) qui bornent SYSCLK, le REGLPF du low-power run, le PVD (PVDO face à VDD, ou PB7 face à VREFINT, sur la ligne EXTI 16) ; Stop 0 et Stop 1 (les horloges du domaine du cœur arrêtées sauf celles du RTC et de l'IWDG, HSE et la PLL éteints, l'interruption ou l'événement d'une ligne EXTI réveillant la puce sur HSI16), Standby (la RAM perdue sauf la SRAM2 avec RRS, les broches relâchées sauf les tirages que CR3.APC conserve depuis PUCRx/PDCRx et ceux des broches de réveil, un front de broche de réveil de la polarité de CR4, un réveil interne, NRST ou l'IWDG y mettant fin par un reset, SR1.SBF), Shutdown (la SRAM2 perdue aussi, quitté par un reset de brownout), les nRST_STOP, nRST_STDBY et nRST_SHDW des octets d'option. FLASH (flash_g4.c) : le déverrouillage par KEYR et OPTKEYR, la programmation par double mot avec SIZERR, PGAERR, PGSERR, PROGERR et WRPERR, la programmation rapide de rangées de 256 octets avec MISSERR, les effacements de page et de banc, EOP et l'interruption d'erreur, BSY pendant les temps typiques du DS12288, un programme qui s'exécute depuis le banc en opération bloqué tandis que l'autre banc reste lisible (lecture pendant l'écriture), les octets d'option avec leurs compléments (OPTVERR en cas de discordance) chargés à chaque reset, OPTSTRT et le reset d'OBL_LAUNCH, les zones WRP, BOOT0 depuis PB8 ou nBOOT0 selon nSWBOOT0 (un démarrage sur la mémoire système signalé, mcu.boot_mode), les états d'attente, le prefetch et les caches d'ACR dans le minutage des lectures d'instructions. GPIO (gpio_f4.c) : MODER, OTYPER, OSPEEDR, PUPDR, IDR, ODR, BSRR, BRR, le verrouillage de LCKR, AFRL/AFRH choisissant parmi les fonctions d'io.alternate, converties des données de broches ouvertes de ST ; l'EXTICR du SYSCFG, le remappage de démarrage de MEMRMP et l'effacement de la CCM SRAM par SCSR ; l'EXTI (exti.c) en deux bancs : les fronts des lignes configurables, SWIER, PR, IMR et EMR, leurs interruptions par ligne, les lignes directes comme événements. USART1-3, UART4-5 et LPUART1 (usart_v2.c) : 7, 8 ou 9 bits avec parité, les bits de stop, MSBFIRST et DATAINV sur la ligne, PRESC et l'horloge noyau, OVER8, le 256 x horloge / BRR d'un LPUART ; TEACK et REACK, les FIFO de 8 trames avec leurs seuils et indicateurs, TXE/TC, RXNE, ORE (ou OVRDIS), PE, FE, IDLE, CMF, RTOF, le break et le LBDF du LIN, le mode muet, nCTS et nRTS, DE pour le RS-485, SWAP, le half-duplex, le CK du maître synchrone, le réveil depuis Stop sur HSI16 ou LSE, les requêtes DMA, toutes les interruptions ; les trames sur la forme d'onde de la broche TX et décodées depuis la broche RX. Les timers (tim.c, l'IP du F4 : base de temps, comparaison de sortie et PWM, capture d'entrée avec filtres, sorties complémentaires avec temps mort et break, les modes esclaves et le codeur, TRGO) avec les horloges internes de TISEL sur TI1 (TIM16 et TIM17 : LSI, LSE, HSE/32, MCO ; TIM5 : LSI, LSE ; TIM15 : LSE), les bits de gel du DBGMCU trouvés par leur nom ; le CRC programmable (crc.c : POLYSIZE, POL, INIT, REV_IN, REV_OUT) ; l'IWDG avec sa fenêtre (WINR), le démarrage matériel et le gel en Stop/Standby des octets d'option, le WWDG avec les trois bits de WDGTB (wdg.c) ; l'IDCODE du DBGMCU (0x469) et ses registres de gel.", + "claims": "Exécution des instructions Cortex-M4F (Thumb-2 avec les instructions DSP de l'ARMv7E-M, FPv4-SP, NVIC à 4 bits de priorité, SCB, SysTick sur HCLK/8, DWT, la MPU à huit régions, l'empilement paresseux du contexte flottant, le semihosting) ; chaque registre du SVD STM32G474 de ST à son adresse avec sa valeur de reset et son type d'accès, corrigé là où le RM0440, l'en-tête CMSIS ou la HAL diffèrent (tools/importers/stm32g474_regs.sh liste les corrections) ; la carte mémoire (512 Kio de flash à double banc, la SRAM1, la SRAM2 et la CCM SRAM à 0x20018000 et son alias à 0x10000000, la mémoire système, l'OTP, les octets d'ingénierie avec l'identifiant unique, la taille de la flash et les valeurs d'étalonnage, les octets d'option des deux bancs, la RAM de messages des FDCAN et la mémoire de paquets de l'USB). RCC (rcc_g4.c) : HSI16, HSE prêt seulement si la carte pilote OSC_IN (un quartz sans HSEBYP, une horloge avec), LSI, LSE et HSI48, chacun prêt après son temps de démarrage une fois activé, LSE conservé à travers tout reset sauf la mise sous tension ; la PLL principale depuis HSI16 ou HSE (M, N, P avec PLLPDIV, Q, R et leurs activations), SYSCLK depuis HSI16, HSE ou PLLR, basculé une fois prêt (SWS), HPRE, PPRE1, PPRE2 et l'horloge des timers ; ce qu'utilise l'horloge système ne peut être éteint, HSEBYP est conservé tant que HSE est allumé, BDCR n'est écrit qu'avec le DBP du PWR et BDRST réinitialise le RTC et le TAMP ; les interruptions de disponibilité de CIER, CIFR et CICR ; les horloges noyau que sélectionnent CCIPR et CCIPR2 pour les U(S)ART et le LPUART, les I2C, le LPTIM1, le SAI1, l'I2S, les FDCAN, l'horloge 48 MHz, les ADC et le QUADSPI ; la fréquence du MCO ; les activations d'horloge des périphériques (leurs registres lisent 0 et ignorent les écritures quand elle est coupée, mcu.clock_gated) et leurs resets ; les indicateurs de reset de RCC_CSR (PINRSTF, BORRSTF, SFTRSTF, IWDGRSTF, WWDGRSTF, LPWRRSTF, OBLRSTF) jusqu'à RMVF ; un VCO, une sortie de PLL ou un SYSCLK hors des limites du DS12288 et de la plage de tension, et trop peu d'états d'attente de la flash pour HCLK, sont signalés (mcu.clock_out_of_spec, mcu.flash_wait_states, table 9 du RM0440). PWR (pwr_g4.c) : les plages de tension et le mode boost de la plage 1 (CR5.R1MODE) qui bornent SYSCLK, le REGLPF du low-power run, le PVD (PVDO face à VDD, ou PB7 face à VREFINT, sur la ligne EXTI 16) ; Stop 0 et Stop 1 (les horloges du domaine du cœur arrêtées sauf celles du RTC et de l'IWDG, HSE et la PLL éteints, l'interruption ou l'événement d'une ligne EXTI réveillant la puce sur HSI16), Standby (la RAM perdue sauf la SRAM2 avec RRS, les broches relâchées sauf les tirages que CR3.APC conserve depuis PUCRx/PDCRx et ceux des broches de réveil, un front de broche de réveil de la polarité de CR4, un réveil interne, NRST ou l'IWDG y mettant fin par un reset, SR1.SBF), Shutdown (la SRAM2 perdue aussi, quitté par un reset de brownout), les nRST_STOP, nRST_STDBY et nRST_SHDW des octets d'option. FLASH (flash_g4.c) : le déverrouillage par KEYR et OPTKEYR, la programmation par double mot avec SIZERR, PGAERR, PGSERR, PROGERR et WRPERR, la programmation rapide de rangées de 256 octets avec MISSERR, les effacements de page et de banc, EOP et l'interruption d'erreur, BSY pendant les temps typiques du DS12288, un programme qui s'exécute depuis le banc en opération bloqué tandis que l'autre banc reste lisible (lecture pendant l'écriture), les octets d'option avec leurs compléments (OPTVERR en cas de discordance) chargés à chaque reset, OPTSTRT et le reset d'OBL_LAUNCH, les zones WRP, BOOT0 depuis PB8 ou nBOOT0 selon nSWBOOT0 (un démarrage sur la mémoire système signalé, mcu.boot_mode), les états d'attente, le prefetch et les caches d'ACR dans le minutage des lectures d'instructions. GPIO (gpio_f4.c) : MODER, OTYPER, OSPEEDR, PUPDR, IDR, ODR, BSRR, BRR, le verrouillage de LCKR, AFRL/AFRH choisissant parmi les fonctions d'io.alternate, converties des données de broches ouvertes de ST ; l'EXTICR du SYSCFG, le remappage de démarrage de MEMRMP et l'effacement de la CCM SRAM par SCSR ; l'EXTI (exti.c) en deux bancs : les fronts des lignes configurables, SWIER, PR, IMR et EMR, leurs interruptions par ligne, les lignes directes comme événements. USART1-3, UART4-5 et LPUART1 (usart_v2.c) : 7, 8 ou 9 bits avec parité, les bits de stop, MSBFIRST et DATAINV sur la ligne, PRESC et l'horloge noyau, OVER8, le 256 x horloge / BRR d'un LPUART ; TEACK et REACK, les FIFO de 8 trames avec leurs seuils et indicateurs, TXE/TC, RXNE, ORE (ou OVRDIS), PE, FE, IDLE, CMF, RTOF, le break et le LBDF du LIN, le mode muet, nCTS et nRTS, DE pour le RS-485, SWAP, le half-duplex, le CK du maître synchrone, le réveil depuis Stop sur HSI16 ou LSE, les requêtes DMA, toutes les interruptions ; les trames sur la forme d'onde de la broche TX et décodées depuis la broche RX. Les timers (tim.c, l'IP du F4 : base de temps, comparaison de sortie et PWM, capture d'entrée avec filtres, sorties complémentaires avec temps mort et break, les modes esclaves et le codeur, TRGO) avec les horloges internes de TISEL sur TI1 (TIM16 et TIM17 : LSI, LSE, HSE/32, MCO ; TIM5 : LSI, LSE ; TIM15 : LSE), les bits de gel du DBGMCU trouvés par leur nom ; le CRC programmable (crc.c : POLYSIZE, POL, INIT, REV_IN, REV_OUT) ; l'IWDG avec sa fenêtre (WINR), le démarrage matériel et le gel en Stop/Standby des octets d'option, le WWDG avec les trois bits de WDGTB (wdg.c) ; DMA1 et DMA2 avec le DMAMUX (dma_g4.c) : huit canaux chacun, un élément par requête ou de mémoire à mémoire, PSIZE et MSIZE assemblés et désassemblés comme le donne la table 89 du RM0440, PINC, MINC, le mode circulaire, HTIF, TCIF, TEIF et GIF avec leurs interruptions, les bits verrouillés tant qu'EN est à 1, une erreur de bus remettant EN à 0 jusqu'à ce que TEIF soit effacé ; les seize canaux du DMAMUX prenant n'importe laquelle des 115 lignes de requête (DMAREQ_ID), la synchronisation sur une ligne EXTI ou l'événement d'un canal (SE, SPOL, SYNC_ID, NBREQ, SOF), la génération d'événements (EGE), les quatre générateurs de requêtes (SIG_ID, GPOL, GNBREQ, OF) et DMAMUX_OVR ; l'IDCODE du DBGMCU (0x469) et ses registres de gel.", "omissions": [ - "les périphériques que coverage.md indique manquants gardent leurs valeurs de registre et lèvent mcu.unsupported_access : les ADC, DAC, comparateurs, amplis op et VREFBUF, DMA1, DMA2 et le DMAMUX, les I2C et SPI, RTC et TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, les FDCAN, l'USB, l'UCPD, le HRTIM, le QUADSPI, le SAI et le FMC", + "les périphériques que coverage.md indique manquants gardent leurs valeurs de registre et lèvent mcu.unsupported_access : les ADC, DAC, comparateurs, amplis op et VREFBUF, les I2C et SPI, RTC et TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, les FDCAN, l'USB, l'UCPD, le HRTIM, le QUADSPI, le SAI et le FMC", "les ajouts G4 des timers : le quatrième bit d'OCxM (one-pulse redéclenchable, PWM combinée et asymétrique), le quatrième bit de SMS (reset et déclenchement combinés, les modes codeur étendus), les entrées de déclenchement internes ITR4 à ITR10 et le cinquième bit de TS, le quatrième bit de MMS, les canaux 5 et 6, le dithering (DITHEN : ARR et CCRx lus comme leurs 16 bits entiers), UIFREMAP, l'index du codeur (ECR), les temps morts asymétriques (DTR2), le break 2, les comparateurs sur TISEL et les sources de break d'AF1/AF2, la table d'interconnexion ITR du G4 (celle du F4 est utilisée)", "les temps de démarrage, les temps de la flash et les seuils du PVD sont les valeurs typiques du DS12288 Rev 6 (HSI16 0,8 µs, un quartz HSE 2 ms, LSI 80 µs, LSE 2 s, HSI48 2,5 µs, le verrouillage de la PLL 15 µs ; un double mot 81,7 µs, une rangée rapide 1,91 ms, l'effacement d'une page 22,02 ms, celui d'un banc 22,13 ms ; les seuils du PVD), pas leur dispersion d'une puce à l'autre ni leur dépendance à la température", "RCC : les systèmes de sécurité d'horloge (CSSON, LSECSSON : les oscillateurs ne tombent jamais en panne), LSEDRV, l'effet de HSITRIM et HSI48CAL sur les fréquences, l'ajustement par le CRS, un périphérique maintenu en reset tant que son bit *RSTR reste à 1, le reset de brownout (BORRSTF seulement à la mise sous tension), les activations du mode sommeil (*SMENR), MCO et LSCO sur leurs broches", @@ -2250,6 +2262,7 @@ "USART : la détection de bruit (NE jamais à 1, ONEBIT sans effet), la détection automatique du débit, TXINV et RXINV, les temps d'assertion et de désassertion de DE (DEAT, DEDT), l'esclave synchrone, les modes carte à puce et IrDA, TCBGT", "SYSCFG : la protection en écriture des pages de la CCM SRAM par SWPR, le temps de son effacement, les erreurs de parité que signale CFGR2 ; EXTI : les sources des lignes internes sauf celle du PVD ; GPIO : EVENTOUT, la cellule de compensation, les écrêtages des broches tolérantes au 5 V", "les seuils des E/S sont les caractéristiques typiques du DS12288 (0,39 x VDD - 0,06 et 0,49 x VDD + 0,26, 200 mV d'hystérésis, tirages de 40 kOhm), pas les 0,3 et 0,7 x VDD garantis ; les résistances de sortie et les vitesses de front sont celles du F446", + "DMA : les délais de l'arbitrage et le minutage de la matrice de bus (une requête est servie aussitôt, un élément de mémoire à mémoire toutes les deux périodes), le filtre de deux périodes des entrées du DMAMUX et les trois périodes pendant lesquelles une écriture de CxCR ou de RGxCR les masque, les octets et demi-mots dupliqués sur les voies pour un périphérique APB qui ignore la taille, LPTIM1_OUT comme entrée de déclenchement et de synchronisation (le LPTIM1 n'est pas modélisé)", "le REV_ID 0x2001 du DBGMCU (révision Z : la révision que porte une carte varie, UM2505 10.1) ; un cœur arrêté consomme son courant de sommeil" ] }, diff --git a/core/analog/mna.c b/core/analog/mna.c index d20988c4c..bea700de8 100644 --- a/core/analog/mna.c +++ b/core/analog/mna.c @@ -1309,21 +1309,29 @@ static es_time_t step_horizon(const esk_island *isl, es_time_t until) } /* the step to x_iter changed no unknown by more than the solver resolves: - * a node voltage by vntol (1 uV), a branch current by abstol (1 pA), the - * absolute tolerances Newton's convergence test uses. Below them two - * solutions are the same to the solver; an exponential tail (an RC on a - * reset pin approaching its supply) would otherwise keep an island stepping - * for dozens of time constants after anything could see it move. The - * relative tolerance is left out on purpose: a slow ramp moving by less - * than reltol of its value per step can still be heading for a threshold. */ + * a node voltage by vntol (1 uV), the absolute tolerance Newton's + * convergence test uses. Below it two solutions are the same to the + * solver; an exponential tail (an RC on a reset pin approaching its supply) + * would otherwise keep an island stepping for dozens of time constants + * after anything could see it move. The relative tolerance is left out on + * purpose for the nodes: a slow ramp moving by less than reltol of its + * value per step can still be heading for a threshold. A branch current + * (a source's, an inductor's, an LED's) is still within a nanoampere and a + * millionth of its value: an LED's milliamps drifting by picoamps as its + * junction warms, or the trapezoidal rule's sub-nanoampere ringing of an + * LC tank whose period is far shorter than the step (a ferrite bead + * between two capacitors), move no node any instrument would see. */ +#define MNA_STILL_ABS_I 1e-9 +#define MNA_STILL_REL_I 1e-6 + static int unchanged(const esk_island *isl) { const mna *p = (const mna *)isl->priv; int i; for (i = 0; i < p->n; i++) { double a = isl->x[i], b = p->x_iter[i]; - double tol = i + 1 < p->nnodes ? isl->p.vntol : isl->p.abstol; - if (fabs(a - b) > tol + 1e-14 * fabs(a)) + double tol = i + 1 < p->nnodes ? isl->p.vntol + 1e-14 * fabs(a) : MNA_STILL_ABS_I + MNA_STILL_REL_I * fabs(a); + if (fabs(a - b) > tol) return 0; } return 1; diff --git a/core/mcu/mcu.c b/core/mcu/mcu.c index 07763f109..5a299e84b 100644 --- a/core/mcu/mcu.c +++ b/core/mcu/mcu.c @@ -3,6 +3,7 @@ /* mcu.c -- the MCU runtime (mcu.h says what it does). */ #include #include +#include #include #include "mcu/analysis.h" @@ -141,6 +142,7 @@ typedef struct mcu_state { mcu_uart uart[MCU_UARTS]; int nuart; char console[16]; + int console_pin[2]; /* the bridge's TX and RX pins (port * 32 + bit), or -1 */ esk_an *an; /* the analyses watching the firmware, or NULL */ unsigned an_what; esk_air_node air; /* its radio on the session's air, when it has one */ @@ -822,6 +824,23 @@ static mcu_uart *uart_named(mcu_state *st, const char *unit, int add) return &st->uart[st->nuart++]; } +/* the console's unit: the UART whose TX (tx 1) or RX the firmware has + * muxed onto the bridge's pin, as the bridge hears the pin whichever + * peripheral drives it (an ST-LINK's VCP on PA2/PA3 is LPUART1's or + * USART2's, as the firmware chooses); the configured one otherwise */ +static const char *console_unit(mcu_state *st, int tx) +{ + int want = st->console_pin[tx ? 0 : 1], k, port, bit; + if (want < 0 || !st->m.uart_pin) + return st->console; + if (st->m.uart_pin(&st->m, st->console, tx, &port, &bit) == 0 && port * 32 + bit == want) + return st->console; + for (k = 0; k < st->m.nrx; k++) + if (st->m.uart_pin(&st->m, st->m.rx[k].unit, tx, &port, &bit) == 0 && port * 32 + bit == want) + return st->m.rx[k].unit; + return st->console; +} + /* the console's bytes, NULs too (a boot loader's binary replies reach * the host port whole); text views skip them (text_view) */ static void text_append(mcu_uart *u, int c) @@ -1686,7 +1705,7 @@ static es_status mcu_on_set(esk_comp *c, const char *input, const esk_json *valu return ES_OK; } if (!strcmp(input, "serial") || !strcmp(input, "tx_text")) - return serial_input(st, st->console, value); + return serial_input(st, console_unit(st, 0), value); if (esk_str_has_prefix(input, "serial:")) return serial_input(st, input + 7, value); return ES_EINVAL; @@ -1725,12 +1744,12 @@ static void mcu_observe(esk_comp *c, esk_json *out) snprintf(key, sizeof key, "serial.%s", st->uart[i].unit); esk_json_set_string(a, out, key, t ? t : ""); /* the console under the virtual terminal's name, for serial probes */ - if (!strcmp(st->uart[i].unit, st->console)) + if (!strcmp(st->uart[i].unit, console_unit(st, 1))) esk_json_set_string(a, out, "rx_text", t ? t : ""); if (t) esk_free(a, t, n + 1); } - if (!uart_named(st, st->console, 0)) + if (!uart_named(st, console_unit(st, 1), 0)) esk_json_set_string(a, out, "rx_text", ""); } @@ -1934,7 +1953,7 @@ esk_an *esk_mcu_analysis(const esk_comp *c) const char *esk_mcu_console(esk_comp *c, size_t *len, u64 *total) { mcu_state *st = esk_mcu_is(c) ? state_of(c) : NULL; - mcu_uart *u = st && st->attached ? uart_named(st, st->console, 0) : NULL; + mcu_uart *u = st && st->attached ? uart_named(st, console_unit(st, 1), 0) : NULL; *len = u ? u->text_len : 0; *total = u ? u->text_total : 0; return u ? u->text : ""; @@ -1986,14 +2005,14 @@ esk_json *esk_mcu_serial_json(esk_comp *c, esk_alloc *a) return o; for (i = 0; i < st->nuart; i++) esk_json_set_string(a, o, st->uart[i].unit, st->uart[i].text); - esk_json_set_string(a, o, "console", st->console); + esk_json_set_string(a, o, "console", console_unit(st, 1)); return o; } uint32_t esk_mcu_console_baud_of(esk_comp *c, uint64_t index, uint64_t *until) { mcu_state *st = esk_mcu_is(c) ? state_of(c) : NULL; - mcu_uart *u = st && st->attached ? uart_named(st, st->console, 0) : NULL; + mcu_uart *u = st && st->attached ? uart_named(st, console_unit(st, 1), 0) : NULL; int i; *until = UINT64_MAX; for (i = u ? u->nrate - 1 : -1; i >= 0; i--) @@ -2010,7 +2029,7 @@ uint32_t esk_mcu_console_baud_of(esk_comp *c, uint64_t index, uint64_t *until) uint32_t esk_mcu_console_baud(esk_comp *c) { mcu_state *st = esk_mcu_is(c) ? state_of(c) : NULL; - mcu_uart *u = st && st->attached ? uart_named(st, st->console, 0) : NULL; + mcu_uart *u = st && st->attached ? uart_named(st, console_unit(st, 1), 0) : NULL; u64 hz; u32 bc; if (!u || !u->rx || !u->rx->bit_cycles) @@ -2300,6 +2319,17 @@ es_status esk_mcu_attach(esk_comp *c, const esk_mcu_setup *su, char *why, size_t speed_table(esk_json_get(esk_json_get(esk_json_get(su->mcu, "io"), "electrical"), "slew_v_per_us"), st->slew); snprintf(st->console, sizeof st->console, "%s", su->console ? su->console : "USART1"); + { + const char *pin[2]; + int k; + pin[0] = su->console_tx; + pin[1] = su->console_rx; + for (k = 0; k < 2; k++) + st->console_pin[k] = pin[k] && pin[k][0] == 'P' && pin[k][1] >= 'A' && pin[k][1] <= 'K' && + pin[k][2] >= '0' && pin[k][2] <= '9' + ? (pin[k][1] - 'A') * 32 + (int)strtol(pin[k] + 2, NULL, 10) + : -1; + } for (port = 0; port < MCU_PORTS; port++) for (bit = 0; bit < 16; bit++) { snprintf(name, sizeof name, "P%c%d", 'A' + port, bit); diff --git a/core/mcu/mcu.h b/core/mcu/mcu.h index 1073ec743..4a0518a03 100644 --- a/core/mcu/mcu.h +++ b/core/mcu/mcu.h @@ -50,6 +50,10 @@ typedef struct esk_mcu_setup { const char *image_name; es_time_t quantum_ps; /* 0: 10 us */ const char *console; /* the default serial unit ("USART1") */ + /* the board's serial bridge's pins (an ST-LINK's VCP on PA2/PA3), or + * NULL: the console is then whichever UART the firmware muxes onto + * them, as the bridge is wired to the pins, not to a peripheral */ + const char *console_tx, *console_rx; const esk_mcu_file *files; /* the memory regions' factory files */ int nfiles; const unsigned char *mac; /* this chip's factory MAC (6 bytes), or NULL */ diff --git a/core/mcu/models.c b/core/mcu/models.c index 08772fa27..f3dd4172d 100644 --- a/core/mcu/models.c +++ b/core/mcu/models.c @@ -37,6 +37,8 @@ static const struct esk_rf_model_type model_types[] = { { "stm32f4-syscfg", &esk_stm32f4_syscfg_ops, esk_stm32f4_syscfg_create }, { "stm32f4-dbgmcu", &esk_stm32f4_dbgmcu_ops, esk_stm32f4_dbgmcu_create }, { "stm32f4-dma", &esk_stm32f4_dma_ops, esk_stm32f4_dma_create }, + { "stm32g4-dma", &esk_stm32g4_dma_ops, esk_stm32g4_dma_create }, + { "stm32g4-dmamux", &esk_stm32g4_dmamux_ops, esk_stm32g4_dmamux_create }, { "stm32f4-adc", &esk_stm32f4_adc_ops, esk_stm32f4_adc_create }, { "stm32f4-adc-common", &esk_stm32f4_adc_common_ops, esk_stm32f4_adc_common_create }, { "stm32f4-dac", &esk_stm32f4_dac_ops, esk_stm32f4_dac_create }, diff --git a/core/mcu/stm32/adc_f4.c b/core/mcu/stm32/adc_f4.c index b45c72d3c..2a82f6a41 100644 --- a/core/mcu/stm32/adc_f4.c +++ b/core/mcu/stm32/adc_f4.c @@ -776,4 +776,5 @@ void esk_stm32_trigger(struct esk_mach *s, const char *sig, int level) group_start(a, 1); } esk_stm32_dac_trigger(s, sig, level); + esk_stm32g4_dmamux_input(s, sig, level); } diff --git a/core/mcu/stm32/dma_f4.c b/core/mcu/stm32/dma_f4.c index d9dcb27cb..fddfe0e05 100644 --- a/core/mcu/stm32/dma_f4.c +++ b/core/mcu/stm32/dma_f4.c @@ -270,7 +270,7 @@ static int item(struct dma *d, int s) return fifo_to_memory(d, s, v32(x->ndtr) <= 1); } -static void items_left(struct esk_mach *s, const char *sig, u32 left) +void esk_stm32_dma_items_left(struct esk_mach *s, const char *sig, u32 left) { if (!left) { esk_stm32_spi_dma_end(s, sig); @@ -297,7 +297,7 @@ static void serve(struct dma *d, int s, const char *sig) counted(d, s); /* the peripheral hears of the last items (EOT, I2C's EOT-1) */ if (before <= 2) - items_left(d->s, sig, before - 1); + esk_stm32_dma_items_left(d->s, sig, before - 1); } fifo_status(x); } @@ -390,7 +390,7 @@ void esk_stm32_dma_request(struct esk_mach *s, const char *sig, int level) pend_add(d, sig); /* served now if a stream takes it, else it waits */ if (!esk_rf_gated(d->p)) drain(d); - } + } esk_stm32g4_dma_request(s, sig, level); /* the G4's DMAMUX (dma_g4.c) */ } /* ---- memory to memory ------------------------------------------------------ */ diff --git a/core/mcu/stm32/dma_g4.c b/core/mcu/stm32/dma_g4.c new file mode 100644 index 000000000..da7e5e5d4 --- /dev/null +++ b/core/mcu/stm32/dma_g4.c @@ -0,0 +1,736 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* Copyright 2026 Junior Deogracias */ +/* dma_g4.c -- the STM32G4's DMA controllers (RM0440 12) and its DMA request + * multiplexer (RM0440 13), over the register file. + * + * DMA1 and DMA2 (stm32g4-dma), eight channels each: + * - a channel (CCRx.EN) moves one item a request, peripheral to memory + * (DIR 0) or memory to peripheral (DIR 1), or, with MEM2MEM, the + * whole block without requests, one item every two cycles, as the bus + * lets it; the source is read at its size and written at the + * destination's, zero-extended or truncated as table 89 gives, both + * addresses stepping by their own sizes (PINC, MINC); + * - CNDTRx counts the items left: half of them done sets HTIF, all of + * them TCIF (and GIF with either); circular mode (CIRC) reloads CNDTR + * and the addresses; otherwise the channel stays enabled and serves no + * more requests until it is disabled and programmed again; a channel + * enabled with CNDTR 0 serves nothing; + * - an access the bus refuses sets TEIF and clears EN, which cannot be + * set again while TEIF is; + * - while EN is set, MEM2MEM, PL, MSIZE, PSIZE, MINC, PINC and DIR, and + * CNDTR, keep their values; CPAR and CMAR take a write the transfer in + * progress does not use (it keeps its internal addresses); + * - IFCR's CGIFx clears the channel's four flags, CTEIFx, CHTIFx and + * CTCIFx their own flag (and GIF once none of the three is left); a + * channel's interrupt is pending while TCIF with TCIE, HTIF with HTIE + * or TEIF with TEIE; + * - the last two items of a round tell the peripheral (an SPI's CRC + * follows the last, an I2C NACKs the byte after the next-to-last). + * + * DMAMUX (stm32g4-dmamux): sixteen request-line channels, 0 to 7 to DMA1's + * channels 1 to 8 and 8 to 15 to DMA2's, and four request generators: + * - CxCR's DMAREQ_ID selects the request line (the description's + * dma_requests, the HAL's numbering, 1 to 4 the generators); + * - SE: the line reaches the DMA only after an edge (SPOL) on the + * synchronisation input SYNC_ID, if a request is pending then (an edge + * with none is discarded), for NBREQ + 1 served requests; an edge + * while the counter is below NBREQ sets SOFx; + * - EGE: an event each NBREQ + 1 served requests (each one with NBREQ 0), + * channels 0 to 3's on trigger and synchronisation inputs 16 to 19; + * - a generator (RGxCR.GE) produces GNBREQ + 1 requests from an edge + * (GPOL) of its trigger input SIG_ID; an edge before they are all + * served sets OFx; + * - the trigger and synchronisation inputs: EXTI lines 0 to 15 (0 to 15), + * the channels' events (16 to 19), LPTIM1_OUT (20); + * - CFR and RGCFR clear SOF and OF; DMAMUX_OVR is pending while a flag + * is set with its channel's SOIE or generator's OIE. + * + * Not modelled: the arbitration's delays (a request is served at once, the + * channel priority deciding only between channels taking the same + * request), the bus matrix's timing, the edge filter's two AHB cycles and + * the three cycles a CxCR or RGxCR write masks the inputs for, the byte and + * half-word lanes duplicated for an APB peripheral that ignores the access + * size (the register file takes each size as it is), LPTIM1_OUT (no LPTIM + * model yet). */ +#include +#include +#include + +#include "mcu/stm32/stm32.h" + +/* CCR */ +#define EN (1u << 0) +#define TCIE (1u << 1) +#define HTIE (1u << 2) +#define TEIE (1u << 3) +#define DIR (1u << 4) +#define CIRC (1u << 5) +#define PINC (1u << 6) +#define MINC (1u << 7) +#define MEM2MEM (1u << 14) +/* read-only while EN: MEM2MEM, PL, MSIZE, PSIZE, MINC, PINC, DIR */ +#define CCR_LOCKED 0x7FD0u +/* ISR, a channel's nibble */ +#define F_GIF 0 +#define F_TC 1 +#define F_HT 2 +#define F_TE 3 + +/* DMAMUX CxCR */ +#define C_SOIE (1u << 8) +#define C_EGE (1u << 9) +#define C_SE (1u << 16) +/* RGxCR */ +#define G_OIE (1u << 8) +#define G_GE (1u << 16) + +#define NCH 8 +#define NMUX 16 +#define NGEN 4 +#define NIN 21 +#define NPEND 32 +#define NID 128 + +struct chan { + struct esk_rf_reg *ccr, *cndtr, *cpar, *cmar; + u32 pa, ma; /* the addresses in use */ + u32 total; /* CNDTR as the channel was enabled, for HT and reloads */ + int ht; /* HTIF set this round */ + int irq; +}; + +struct g4dma { + struct esk_mach *s; + struct esk_rf_periph *p; + struct esk_rf_reg *isr, *ifcr; + struct chan ch[NCH]; + int mux0; /* the DMAMUX channel of channel 1 (0 for DMA1, 8 for DMA2) */ + int running; + u32 frac; /* memory to memory: cycles toward the next item */ +}; + +struct dmamux { + struct esk_mach *s; + struct esk_rf_periph *p; + struct esk_rf_reg *cr[NMUX], *rg[NGEN], *csr, *cfr, *rgsr, *rgcfr; + int nch, irq; + const char *id_sig[NID]; /* request line ID -> its request */ + const char *pend[NPEND]; /* requests waiting for a channel */ + int npend; + int conn[NMUX]; /* SE: the line connected since a sync edge */ + u32 cnt[NMUX]; /* served requests left before the counter reloads */ + u32 gen_left[NGEN]; /* a generator's requests still to serve */ + int level[NIN]; /* the trigger and sync inputs' levels */ + int busy, depth; +}; + +static const char *const gen_sig[NGEN] = { "DMAMUX_REQ_GEN0", "DMAMUX_REQ_GEN1", "DMAMUX_REQ_GEN2", + "DMAMUX_REQ_GEN3" }; + +static u32 v32(const struct esk_rf_reg *r) { return r ? (u32)r->value : 0; } + +/* ---- the DMA controllers ---------------------------------------------------- */ + +static u32 psize(const struct chan *c) { return 1u << (v32(c->ccr) >> 8 & 3); } +static u32 msize(const struct chan *c) { return 1u << (v32(c->ccr) >> 10 & 3); } + +static void irq_check(struct g4dma *d, int k) +{ + struct chan *c = &d->ch[k]; + u32 f = v32(d->isr) >> (4 * k), cr = v32(c->ccr); + if (((f >> F_TC & 1) && (cr & TCIE)) || ((f >> F_HT & 1) && (cr & HTIE)) || ((f >> F_TE & 1) && (cr & TEIE))) + esk_rf_interrupt(d->p, c->irq); +} + +static void set_flag(struct g4dma *d, int k, int f) +{ + esk_rf_hw(d->isr, d->isr->value | ((u64)1u << (4 * k + f)) | ((u64)1u << (4 * k + F_GIF))); + irq_check(d, k); +} + +/* the bus refused an access: TEIF, the channel off */ +static void transfer_error(struct g4dma *d, int k) +{ + esk_rf_hw(d->ch[k].ccr, d->ch[k].ccr->value & ~(u64)EN); + set_flag(d, k, F_TE); +} + +static int active(const struct chan *c) { return (v32(c->ccr) & EN) && v32(c->cndtr); } + +/* one item from the source to the destination at their sizes (table 89): + * 0, or -1 on a bus error */ +static int item(struct g4dma *d, int k) +{ + struct chan *c = &d->ch[k]; + u32 cr = v32(c->ccr), v = 0; + int to_p = (cr & DIR) != 0; + u32 *src = to_p ? &c->ma : &c->pa, *dst = to_p ? &c->pa : &c->ma; + u32 ss = to_p ? msize(c) : psize(c), ds = to_p ? psize(c) : msize(c); + int sinc = (cr & (to_p ? MINC : PINC)) != 0, dinc = (cr & (to_p ? PINC : MINC)) != 0; + if (esk_bus_read(&d->s->bus, *src, (int)ss, &v)) + return -1; + if (ss < 4) + v &= (1u << (8 * ss)) - 1u; + if (ds < 4) + v &= (1u << (8 * ds)) - 1u; + if (esk_bus_write(&d->s->bus, *dst, (int)ds, v)) + return -1; + if (sinc) + *src += ss; + if (dinc) + *dst += ds; + return 0; +} + +/* one item counted: HT, TC, the circular reload */ +static void counted(struct g4dma *d, int k) +{ + struct chan *c = &d->ch[k]; + u32 n = v32(c->cndtr); + if (n) + esk_rf_hw(c->cndtr, --n); + if (!c->ht && c->total > 1 && n <= c->total / 2) { + c->ht = 1; + set_flag(d, k, F_HT); + } + if (n) + return; + set_flag(d, k, F_TC); + if (v32(c->ccr) & CIRC) { + esk_rf_hw(c->cndtr, c->total); + c->pa = v32(c->cpar); + c->ma = v32(c->cmar); + c->ht = 0; + } +} + +/* a request served by channel k: one item; 1 when served */ +static int serve(struct g4dma *d, int k, const char *sig) +{ + struct chan *c = &d->ch[k]; + u32 before; + if (!active(c) || esk_rf_gated(d->p)) + return 0; + if (item(d, k)) { + transfer_error(d, k); + return 1; /* the request was taken, and the channel is off */ + } + before = v32(c->cndtr); + counted(d, k); + if (before <= 2 && sig) + esk_stm32_dma_items_left(d->s, sig, before - 1); + return 1; +} + +static int m2m_any(const struct g4dma *d) +{ + int k; + for (k = 0; k < NCH; k++) + if (active(&d->ch[k]) && (v32(d->ch[k].ccr) & MEM2MEM)) + return 1; + return 0; +} + +static void run_clock(struct g4dma *d) +{ + esk_rf_clock(d->p, &d->running, m2m_any(d)); +} + +static void dma_tick(void *ctx, u32 cycles) +{ + struct g4dma *d = (struct g4dma *)ctx; + u32 items = (d->frac + cycles) / 2; + int pl, k; + d->frac = (d->frac + cycles) % 2; + /* the most urgent memory-to-memory channel first */ + for (pl = 3; pl >= 0 && items; pl--) + for (k = 0; k < NCH && items; k++) { + struct chan *c = &d->ch[k]; + if ((int)(v32(c->ccr) >> 12 & 3) != pl || !(v32(c->ccr) & MEM2MEM)) + continue; + while (items && active(c)) { + if (item(d, k)) { + transfer_error(d, k); + break; + } + counted(d, k); + items--; + } + } + run_clock(d); +} + +static int dma_next_event(void *ctx, u32 *cycles) +{ + struct g4dma *d = (struct g4dma *)ctx; + if (!m2m_any(d)) + return 0; + *cycles = 2; + return 1; +} + +static struct dmamux *mux_of(struct esk_mach *s); +static void mux_drain(struct dmamux *x); + +static void enable(struct g4dma *d, int k) +{ + struct chan *c = &d->ch[k]; + c->total = v32(c->cndtr); + c->pa = v32(c->cpar); + c->ma = v32(c->cmar); + c->ht = 0; +} + +static u32 dma_read(void *ctx, u32 off, int n) +{ + struct g4dma *d = (struct g4dma *)ctx; + return esk_rf_read(d->p, off, n); +} + +static void dma_write(void *ctx, u32 off, int n, u32 v) +{ + struct g4dma *d = (struct g4dma *)ctx; + int k; + if (off == esk_rf_off(d->isr)) + return; + if (off == esk_rf_off(d->ifcr)) { + u32 isr = v32(d->isr); + for (k = 0; k < NCH; k++) { + u32 w = v >> (4 * k) & 0xFu, f = isr >> (4 * k) & 0xFu; + if (w & 1u) + f = 0; + f &= ~(w & 0xEu); + if (!(f & 0xEu)) + f = 0; + isr = (isr & ~(0xFu << (4 * k))) | f << (4 * k); + } + esk_rf_hw(d->isr, isr); + return; + } + for (k = 0; k < NCH; k++) { + struct chan *c = &d->ch[k]; + u32 cr = v32(c->ccr); + if (off == esk_rf_off(c->ccr)) { + u32 nv; + esk_rf_write(d->p, off, n, v); + nv = v32(c->ccr); + if (cr & EN) + nv = (nv & ~CCR_LOCKED) | (cr & CCR_LOCKED); + if ((nv & EN) && (v32(d->isr) >> (4 * k + F_TE) & 1)) + nv &= ~EN; /* not again until TEIF is cleared */ + esk_rf_hw(c->ccr, nv); + if ((nv & EN) && !(cr & EN)) { + enable(d, k); + run_clock(d); + mux_drain(mux_of(d->s)); + } + return; + } + if (off == esk_rf_off(c->cndtr)) { + if (!(cr & EN)) + esk_rf_write(d->p, off, n, v); + return; + } + } + esk_rf_write(d->p, off, n, v); +} + +static void dma_reset(void *ctx) +{ + struct g4dma *d = (struct g4dma *)ctx; + int k; + d->running = 0; + d->frac = 0; + for (k = 0; k < NCH; k++) { + d->ch[k].total = 0; + d->ch[k].ht = 0; + d->ch[k].pa = d->ch[k].ma = 0; + } +} + +const struct esk_dev_ops esk_stm32g4_dma_ops = { + "stm32g4-dma", dma_read, dma_write, dma_reset, dma_tick, dma_next_event, +}; + +void *esk_stm32g4_dma_create(struct esk_mach *m, struct esk_rf_periph *p) +{ + struct g4dma *d = (struct g4dma *)esk_mach_alloc(m, sizeof *d); + char n[16]; + int k; + if (!d) + return 0; + d->s = m; + d->p = p; + d->isr = esk_rf_reg(p, "ISR"); + d->ifcr = esk_rf_reg(p, "IFCR"); + if (!d->isr || !d->ifcr) + return 0; + d->mux0 = !strcmp(p->name, "DMA2") ? 8 : 0; + for (k = 0; k < NCH; k++) { + struct chan *c = &d->ch[k]; + snprintf(n, sizeof n, "CCR%d", k + 1); + c->ccr = esk_rf_reg(p, n); + snprintf(n, sizeof n, "CNDTR%d", k + 1); + c->cndtr = esk_rf_reg(p, n); + snprintf(n, sizeof n, "CPAR%d", k + 1); + c->cpar = esk_rf_reg(p, n); + snprintf(n, sizeof n, "CMAR%d", k + 1); + c->cmar = esk_rf_reg(p, n); + if (!c->ccr || !c->cndtr || !c->cpar || !c->cmar) + return 0; + snprintf(n, sizeof n, "_CH%d", k + 1); + c->irq = esk_rf_irq(p, n); + } + esk_rf_set_mwv(d->ifcr, ~(u64)0, ESK_MWV_MODIFY); + return d; +} + +/* ---- the request multiplexer ------------------------------------------------- */ + +static struct dmamux *mux_of(struct esk_mach *s) +{ + struct esk_rf_periph *p = s->rf ? esk_rf_periph(s->rf, "DMAMUX") : 0; + return p && p->ops == &esk_stm32g4_dmamux_ops ? (struct dmamux *)p->ctx : 0; +} + +/* the DMA channel a multiplexer channel feeds */ +static struct g4dma *dma_for(struct dmamux *x, int c, int *k) +{ + struct esk_rf_periph *p = esk_rf_periph(x->s->rf, c < 8 ? "DMA1" : "DMA2"); + *k = c % 8; + return p && p->ops == &esk_stm32g4_dma_ops ? (struct g4dma *)p->ctx : 0; +} + +static const char *line_of(const struct dmamux *x, int c) +{ + u32 id = v32(x->cr[c]) & 0x7Fu; + return id ? x->id_sig[id] : 0; +} + +static u32 nbreq(const struct dmamux *x, int c) { return (v32(x->cr[c]) >> 19 & 31u) + 1u; } + +static void mux_irq(struct dmamux *x) +{ + u32 sof = v32(x->csr), of = v32(x->rgsr); + int c; + for (c = 0; c < x->nch; c++) + if ((sof >> c & 1) && (v32(x->cr[c]) & C_SOIE)) { + esk_rf_interrupt(x->p, x->irq); + return; + } + for (c = 0; c < NGEN; c++) + if ((of >> c & 1) && (v32(x->rg[c]) & G_OIE)) { + esk_rf_interrupt(x->p, x->irq); + return; + } +} + +static void mux_input(struct dmamux *x, int in, int level); + +/* channel c's event output, a pulse on inputs 16 to 19 */ +static void event_out(struct dmamux *x, int c) +{ + if (c > 3 || x->depth > 4) + return; + x->depth++; + mux_input(x, 16 + c, 1); + mux_input(x, 16 + c, 0); + x->depth--; +} + +/* may channel c pass its line now (SE: connected by a sync edge) */ +static int passes(const struct dmamux *x, int c) +{ + return !(v32(x->cr[c]) & C_SE) || x->conn[c]; +} + +/* a served request on channel c: the counter for SE and EGE */ +static void counted_req(struct dmamux *x, int c) +{ + u32 cr = v32(x->cr[c]); + if (!(cr & (C_SE | C_EGE))) + return; + if (x->cnt[c] > 1) { + x->cnt[c]--; + return; + } + x->cnt[c] = nbreq(x, c); + if (cr & C_SE) + x->conn[c] = 0; + if (cr & C_EGE) + event_out(x, c); +} + +/* a request on line `sig`: every channel selecting it that passes it + * serves one item; 1 when one did */ +static int offer(struct dmamux *x, const char *sig) +{ + int c, served = 0, pl; + if (esk_rf_gated(x->p)) + return 0; + for (pl = 3; pl >= 0; pl--) + for (c = 0; c < x->nch; c++) { + const char *l = line_of(x, c); + struct g4dma *d; + int k; + if (!l || strcmp(l, sig) || !passes(x, c) || !(d = dma_for(x, c, &k))) + continue; + if ((int)(v32(d->ch[k].ccr) >> 12 & 3) != pl || (v32(d->ch[k].ccr) & MEM2MEM)) + continue; + if (serve(d, k, sig)) { + served = 1; + counted_req(x, c); + } + } + return served; +} + +/* could a channel take `sig` now */ +static int taken(struct dmamux *x, const char *sig) +{ + int c; + for (c = 0; c < x->nch; c++) { + const char *l = line_of(x, c); + struct g4dma *d; + int k; + if (l && !strcmp(l, sig) && passes(x, c) && (d = dma_for(x, c, &k)) && active(&d->ch[k]) && + !(v32(d->ch[k].ccr) & MEM2MEM) && !esk_rf_gated(d->p)) + return 1; + } + return 0; +} + +static int pending(const struct dmamux *x, const char *sig) +{ + int i; + for (i = 0; i < x->npend; i++) + if (!strcmp(x->pend[i], sig)) + return 1; + for (i = 0; i < NGEN; i++) + if (x->gen_left[i] && !strcmp(gen_sig[i], sig)) + return 1; + return 0; +} + +static void pend_add(struct dmamux *x, const char *sig) +{ + int i; + for (i = 0; i < x->npend; i++) + if (!strcmp(x->pend[i], sig)) + return; + if (x->npend < NPEND) + x->pend[x->npend++] = sig; +} + +static void pend_remove(struct dmamux *x, const char *sig) +{ + int i; + for (i = 0; i < x->npend; i++) + if (!strcmp(x->pend[i], sig)) { + x->pend[i] = x->pend[--x->npend]; + return; + } +} + +/* the generators' requests, served while a channel takes them */ +static int run_generators(struct dmamux *x) +{ + int g, any = 0; + for (g = 0; g < NGEN; g++) + while (x->gen_left[g] && taken(x, gen_sig[g]) && offer(x, gen_sig[g])) { + x->gen_left[g]--; + any = 1; + } + return any; +} + +/* the waiting requests a channel now takes */ +static void mux_drain(struct dmamux *x) +{ + int i, again = 1; + if (!x || x->busy) + return; + x->busy = 1; + while (again) { + again = run_generators(x); + for (i = 0; i < x->npend; i++) { + const char *sig = x->pend[i]; + if (!taken(x, sig)) + continue; + pend_remove(x, sig); + (void)offer(x, sig); + again = 1; + break; + } + } + x->busy = 0; +} + +static int edge(u32 pol, int level) +{ + return pol == 3 || (pol == 1 && level) || (pol == 2 && !level); +} + +/* a trigger and synchronisation input's level (0 to 20) */ +static void mux_input(struct dmamux *x, int in, int level) +{ + int c; + if (in < 0 || in >= NIN || x->level[in] == !!level) + return; + x->level[in] = !!level; + if (esk_rf_gated(x->p)) + return; + for (c = 0; c < NGEN; c++) { + u32 rg = v32(x->rg[c]); + if (!(rg & G_GE) || (int)(rg & 31u) != in || !edge(rg >> 17 & 3, level)) + continue; + if (x->gen_left[c]) { + esk_rf_hw(x->rgsr, x->rgsr->value | (u64)1u << c); + mux_irq(x); + continue; + } + x->gen_left[c] = (rg >> 19 & 31u) + 1u; + } + for (c = 0; c < x->nch; c++) { + u32 cr = v32(x->cr[c]); + const char *l = line_of(x, c); + if (!(cr & C_SE) || (int)(cr >> 24 & 31u) != in || !edge(cr >> 17 & 3, level)) + continue; + if (x->conn[c] && x->cnt[c] < nbreq(x, c)) { + esk_rf_hw(x->csr, x->csr->value | (u64)1u << c); + mux_irq(x); + continue; + } + if (l && pending(x, l)) { + x->conn[c] = 1; + x->cnt[c] = nbreq(x, c); + } + } + mux_drain(x); +} + +static u32 mux_read(void *ctx, u32 off, int n) +{ + struct dmamux *x = (struct dmamux *)ctx; + return esk_rf_read(x->p, off, n); +} + +static void mux_write(void *ctx, u32 off, int n, u32 v) +{ + struct dmamux *x = (struct dmamux *)ctx; + int c; + if ((x->csr && off == esk_rf_off(x->csr)) || (x->rgsr && off == esk_rf_off(x->rgsr))) + return; + if (x->cfr && off == esk_rf_off(x->cfr)) { + esk_rf_hw(x->csr, x->csr->value & ~(u64)(v & 0xFFFFu)); + return; + } + if (x->rgcfr && off == esk_rf_off(x->rgcfr)) { + esk_rf_hw(x->rgsr, x->rgsr->value & ~(u64)(v & 0xFu)); + return; + } + esk_rf_write(x->p, off, n, v); + for (c = 0; c < x->nch; c++) + if (off >= esk_rf_off(x->cr[c]) && off < esk_rf_off(x->cr[c]) + 4) { + u32 cr = v32(x->cr[c]); + if (!(cr & (C_SE | C_EGE))) + x->cnt[c] = nbreq(x, c); + if (!(cr & C_SE)) + x->conn[c] = 0; + else if (!x->cnt[c]) + x->cnt[c] = nbreq(x, c); + } + for (c = 0; c < NGEN; c++) + if (off >= esk_rf_off(x->rg[c]) && off < esk_rf_off(x->rg[c]) + 4 && !(v32(x->rg[c]) & G_GE)) + x->gen_left[c] = 0; + mux_drain(x); +} + +static void mux_reset(void *ctx) +{ + struct dmamux *x = (struct dmamux *)ctx; + int c; + x->npend = 0; + x->busy = x->depth = 0; + for (c = 0; c < NMUX; c++) { + x->conn[c] = 0; + x->cnt[c] = 1; + } + for (c = 0; c < NGEN; c++) + x->gen_left[c] = 0; + for (c = 0; c < NIN; c++) + x->level[c] = 0; +} + +const struct esk_dev_ops esk_stm32g4_dmamux_ops = { + "stm32g4-dmamux", mux_read, mux_write, mux_reset, 0, 0, +}; + +void *esk_stm32g4_dmamux_create(struct esk_mach *m, struct esk_rf_periph *p) +{ + struct dmamux *x = (struct dmamux *)esk_mach_alloc(m, sizeof *x); + const struct esk_rf *rf = m->rf; + char n[16]; + int c, i; + if (!x) + return 0; + x->s = m; + x->p = p; + for (c = 0; c < NMUX; c++) { + snprintf(n, sizeof n, "C%dCR", c); + x->cr[c] = esk_rf_reg(p, n); + if (!x->cr[c]) + break; + } + x->nch = c; + for (c = 0; c < NGEN; c++) { + snprintf(n, sizeof n, "RG%dCR", c); + x->rg[c] = esk_rf_reg(p, n); + if (!x->rg[c]) + return 0; + } + x->csr = esk_rf_reg(p, "CSR"); + x->cfr = esk_rf_reg(p, "CFR"); + x->rgsr = esk_rf_reg(p, "RGSR"); + x->rgcfr = esk_rf_reg(p, "RGCFR"); + if (!x->nch || !x->csr || !x->cfr || !x->rgsr || !x->rgcfr) + return 0; + x->irq = esk_rf_irq(p, "OVR"); + /* the request lines, as the description numbers them */ + for (i = 0; rf && i < rf->ndma; i++) + if (!strcmp(rf->dma_ctl[i], "DMAMUX") && rf->dma_chan[i] > 0 && rf->dma_chan[i] < NID) + x->id_sig[rf->dma_chan[i]] = rf->dma_sig[i]; + esk_rf_set_mwv(x->cfr, ~(u64)0, ESK_MWV_MODIFY); + esk_rf_set_mwv(x->rgcfr, ~(u64)0, ESK_MWV_MODIFY); + mux_reset(x); + return x; +} + +/* ---- the peripherals' side ----------------------------------------------------- */ + +void esk_stm32g4_dma_request(struct esk_mach *s, const char *sig, int level) +{ + struct dmamux *x = mux_of(s); + if (!x) + return; + if (!level) { + pend_remove(x, sig); + return; + } + pend_add(x, sig); /* served now if a channel takes it, else it waits */ + mux_drain(x); +} + +void esk_stm32g4_dmamux_input(struct esk_mach *s, const char *sig, int level) +{ + struct dmamux *x = mux_of(s); + int in = -1; + if (!x || !sig) + return; + if (!strncmp(sig, "EXTI", 4) && sig[4] >= '0' && sig[4] <= '9') + in = (int)strtol(sig + 4, NULL, 10); + else if (!strcmp(sig, "LPTIM1_OUT")) + in = 20; + if ((in >= 0 && in < 16) || in == 20) + mux_input(x, in, level); +} diff --git a/core/mcu/stm32/stm32.h b/core/mcu/stm32/stm32.h index 1bc2ab24d..c215f08f5 100644 --- a/core/mcu/stm32/stm32.h +++ b/core/mcu/stm32/stm32.h @@ -172,6 +172,17 @@ void *esk_stm32f4_dma_create(struct esk_mach *m, struct esk_rf_periph *p); * or falls: a stream that takes it moves the data now, else it waits for * one; nothing without a DMA model. `sig` must outlive the request. */ void esk_stm32_dma_request(struct esk_mach *m, const char *sig, int level); +/* a DMA channel's last items for request `sig` (the peripheral hears of + * them: an SPI's CRC follows the last, an I2C NACKs after EOT-1) */ +void esk_stm32_dma_items_left(struct esk_mach *m, const char *sig, u32 left); +/* the G4's DMA controllers and request multiplexer (dma_g4.c): a request + * through DMAMUX; a trigger or synchronisation input's level (EXTI0 to + * EXTI15, LPTIM1_OUT) */ +extern const struct esk_dev_ops esk_stm32g4_dma_ops, esk_stm32g4_dmamux_ops; +void *esk_stm32g4_dma_create(struct esk_mach *m, struct esk_rf_periph *p); +void *esk_stm32g4_dmamux_create(struct esk_mach *m, struct esk_rf_periph *p); +void esk_stm32g4_dma_request(struct esk_mach *m, const char *sig, int level); +void esk_stm32g4_dmamux_input(struct esk_mach *m, const char *sig, int level); /* a USART's alternate-function signal (USART2_TX, _RTS, _CK): the level it * drives, or -1; nCTS's level from its pin; the pin (port, bit) of its TX * (tx 1) or RX, as the family maps it (the runtime's uart_pin) */ diff --git a/core/mcu/stm32/syscfg_f4.c b/core/mcu/stm32/syscfg_f4.c index db3d6314e..357ca90b4 100644 --- a/core/mcu/stm32/syscfg_f4.c +++ b/core/mcu/stm32/syscfg_f4.c @@ -2,7 +2,9 @@ /* Copyright 2026 Junior Deogracias */ /* syscfg_f4.c -- the STM32F4's system configuration controller (RM0390 8): * - EXTICR1 to EXTICR4 pick the port each EXTI line 0-15 listens to - * (0 port A ... 7 port H), for the GPIO model's edges (gpio_f4.c); + * (0 port A ... 7 port H), for the GPIO model's edges (gpio_f4.c); a + * line given another port sees the new pin's level at once, an edge + * when it differs from the old one's; * - MEMRMP's MEM_MODE picks what answers at 0x00000000: the main flash * (000, out of reset with BOOT0 low), the system memory (001), SRAM1's * 112 KiB (011); FMC's bank 1 (010) and SDRAM bank 1 (100) and the @@ -93,10 +95,31 @@ static u32 syscfg_read(void *ctx, u32 off, int n) return esk_rf_read(((struct syscfg *)ctx)->p, off, n); } +/* the level of a pin's input (IDR), port and bit */ +static int pin_level(struct esk_mach *s, int port, int bit) +{ + char name[8] = "GPIOx"; + struct esk_rf_periph *g; + struct esk_rf_reg *idr; + name[4] = (char)('A' + port); + g = esk_rf_periph(s->rf, name); + idr = g ? esk_rf_reg(g, "IDR") : 0; + return idr ? (int)(idr->value >> bit & 1) : 0; +} + static void syscfg_write(void *ctx, u32 off, int n, u32 v) { struct syscfg *c = (struct syscfg *)ctx; + int before[16], i; + for (i = 0; i < 16; i++) + before[i] = esk_stm32f4_exti_port(c->s, i); esk_rf_write(c->p, off, n, v); + /* a line given another port sees that pin's level at once: its edge + * detector follows the multiplexer's output (a switch from a high pin + * to a low one is a falling edge) */ + for (i = 0; i < 16; i++) + if (esk_stm32f4_exti_port(c->s, i) != before[i]) + esk_stm32_exti_input(c->s, i, pin_level(c->s, esk_stm32f4_exti_port(c->s, i), i)); if (c->scsr && off == esk_rf_off(c->scsr) && (c->scsr->value & 1u)) { /* CCMER: the CCM SRAM erased */ struct esk_region *r = esk_bus_region(&c->s->bus, 0x20018000u, 32u * 1024u); diff --git a/core/project/loader.c b/core/project/loader.c index ad84572c5..894daa1fc 100644 --- a/core/project/loader.c +++ b/core/project/loader.c @@ -992,6 +992,9 @@ static es_status attach_firmware(es_session *s, esk_board_inst *bi, const esk_ca su.image_len = len; su.image_name = rel; su.console = esk_json_get_str(esk_json_get(mi->desc, "console"), "default", "USART1"); + /* the pins the board's serial bridge is wired to */ + su.console_tx = esk_json_get_str(esk_json_get(board->desc, "console"), "tx", NULL); + su.console_rx = esk_json_get_str(esk_json_get(board->desc, "console"), "rx", NULL); su.quantum_ps = s->core_quantum_ps; nfiles = read_memory_files(s, bi, mi, files); nfiles = board_memory(s, bi, board->desc, files, nfiles); diff --git a/docs/STATUS.md b/docs/STATUS.md index 89b02e69d..d2fe7d818 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -13,11 +13,11 @@ dual-bank flash, SRAM1, SRAM2 and the CCM SRAM) on `emblink/nucleo_g474re` corrections `tools/importers/stm32g474_regs.sh` lists, its pins and alternate functions from ST's open pin data. The G4's own IP has new models: the RCC (`stm32g4-rcc`), PWR (`stm32g4-pwr`), flash interface -(`stm32g4-flash`) and the U(S)ARTs and LPUART (`stm32-usart-v2`); GPIO, -SYSCFG, EXTI, the timers, CRC, the watchdogs and DBGMCU are the F4's models -taught the G4's registers. 34 of the 82 peripheral blocks are modelled -(`docs/coverage.md`); the ADCs, DACs, comparators, op-amps, DMA and DMAMUX, -I2C, SPI, RTC, the FDCANs, USB, HRTIM, the math accelerators and the rest +(`stm32g4-flash`), the U(S)ARTs and LPUART (`stm32-usart-v2`), and DMA1, +DMA2 and DMAMUX (`stm32g4-dma`, `stm32g4-dmamux`); GPIO, SYSCFG, EXTI, the +timers, CRC, the watchdogs and DBGMCU are the F4's models taught the G4's +registers. 37 of the 82 peripheral blocks are modelled +(`docs/coverage.md`); the ADCs, DACs, comparators, op-amps, I2C, SPI, RTC, the FDCANs, USB, HRTIM, the math accelerators and the rest keep their registers until their models land. Evidence: @@ -33,7 +33,7 @@ Evidence: handler; - the board's seven fixtures (USB, VIN, E5V, VIN without JP5, the IDD ammeter, B1, LD2 through Q1); -- 20 of STM32CubeG4's NUCLEO-G474RE examples built unmodified +- 24 of STM32CubeG4's NUCLEO-G474RE examples built unmodified (`tests/vendor/stm32cubeg4/run.py`, also in CI): GPIO_IOToggle, GPIO_EXTI, HAL_TimeBase_TIM, RCC_ClockConfig (the PLL moved between HSI16 and the crystal on B1), UART_Printf, the four CRC examples, @@ -42,7 +42,20 @@ Evidence: from, stalled through each operation), FLASH_FastProgram (bank 2 written while bank 1 runs on), IWDG_Reset, IWDG_WindowMode (a refresh before the window resets the part), WWDG_Example, PWR_STOP0, TIM_PWMOutput (85 kHz - on TIM1's four channels) and TIM_OCToggle. + on TIM1's four channels), TIM_OCToggle, DMA_FLASHToRAM and LL's + DMA_CopyFromFlashToMemory_Init (memory to memory), UART_HyperTerminal_DMA + (USART2 on PA2/PA3, both directions by DMA) and + UART_ReceptionToIdle_CircularDMA (LPUART1's receiver by circular DMA); +- `test_stm32g4`'s DMA test: memory to memory, table 89's packing, the + bits locked while EN is set, LPUART1's transmitter through DMAMUX, + synchronisation on EXTI13 with NBREQ and its overrun, a channel's event + triggering a request generator, a bus error's TEIF. + +The STLINK-V3E's virtual COM port is the UART the firmware muxes onto +PA2/PA3 (LPUART1, or USART2 as UART_HyperTerminal_DMA uses it): a board's +console follows its bridge's pins, as the wiring does. An EXTI line given +another port by SYSCFG now sees the new pin's level at once, an edge if it +differs, as the line's edge detector follows the multiplexer. Found on the way: exception entry did not clear CONTROL.SPSEL (every Cortex-M part), and IWDG_Reset's "invalid address" 0x00040001 lies inside diff --git a/docs/coverage.md b/docs/coverage.md index 689bbdde8..80a656595 100644 --- a/docs/coverage.md +++ b/docs/coverage.md @@ -19,7 +19,7 @@ evidence for each model is in [STATUS.md](STATUS.md). | STM32F103C8 | 26 | 0 | 1 | 27 | | STM32F446RE | 53 | 0 | 15 | 68 | | STM32F446ZE | 53 | 0 | 15 | 68 | -| STM32G474RE | 34 | 0 | 48 | 82 | +| STM32G474RE | 37 | 0 | 45 | 82 | ## ESP32 (`espressif/esp32`) @@ -582,7 +582,7 @@ Declared omissions: DBGMCU's freeze bits for the RTC, the I2C SMBus time-outs an ## STM32G474RE (`st/stm32g474re`) Boards: NUCLEO-G474RE. -34 of 82 peripherals modelled, 0 registers only, 48 missing. +37 of 82 peripherals modelled, 0 registers only, 45 missing. | Peripheral | Model | State | |---|---|---| @@ -638,9 +638,9 @@ Boards: NUCLEO-G474RE. | HRTIM_TIME | — | **missing** | | HRTIM_TIMF | — | **missing** | | HRTIM_Common | — | **missing** | -| DMA1 | — | **missing** | -| DMA2 | — | **missing** | -| DMAMUX | — | **missing** | +| DMA1 | `stm32g4-dma` | modelled | +| DMA2 | `stm32g4-dma` | modelled | +| DMAMUX | `stm32g4-dmamux` | modelled | | CORDIC | — | **missing** | | RCC | `stm32g4-rcc` | modelled | | FMAC | — | **missing** | @@ -669,4 +669,4 @@ Boards: NUCLEO-G474RE. | QUADSPI | — | **missing** | | DBGMCU | `stm32f4-dbgmcu` | modelled | -Declared omissions: the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, DMA1, DMA2 and DMAMUX, the I2Cs and SPIs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC; the timers' G4 additions: OCxM's fourth bit (retriggerable one-pulse, combined and asymmetric PWM), SMS's fourth bit (combined reset and trigger, the extended encoder modes), the internal trigger inputs ITR4 to ITR10 and TS's fifth bit, MMS's fourth bit, channels 5 and 6, dithering (DITHEN: ARR and CCRx read as their 16 integer bits), UIFREMAP, the encoder index (ECR), the asymmetric dead times (DTR2), break 2, the comparators on TISEL and AF1/AF2's break sources, the G4's ITR interconnection table (the F4's is used); the start-up times, flash times and PVD thresholds are DS12288 Rev 6's typical values (HSI16 0.8 us, an HSE crystal 2 ms, LSI 80 us, LSE 2 s, HSI48 2.5 us, the PLL's lock 15 us; a double word 81.7 us, a fast row 1.91 ms, a page erase 22.02 ms, a bank erase 22.13 ms; the PVD's thresholds), not their spread between parts or their dependence on temperature; RCC: the clock security systems (CSSON, LSECSSON: the oscillators never fail), LSEDRV, HSITRIM and HSI48CAL's effect on the frequencies, the CRS's trimming, a peripheral held in reset while its *RSTR bit stays set, the brownout reset (BORRSTF only at power-on), the sleep-mode enables (*SMENR), MCO and LSCO on their pins; PWR: the regulator's settling (VOSF never set) and the wake-up times, the supply currents, the PVMs (VDDA is VDD), UCPD's dead-battery bits, VBAT charging; FLASH: the option bytes' programming time, the read protection's levels and their mass erase, PCROP and the securable area, ECC, the bank swap (BFB2, FB_MODE), the boot from SRAM, the power-down modes, the caches' real line length; USART: noise detection (NE never sets, ONEBIT does nothing), auto baud rate detection, TXINV and RXINV, DE's assertion and deassertion times (DEAT, DEDT), the synchronous slave, smartcard and IrDA modes, TCBGT; SYSCFG: SWPR's write protection of the CCM SRAM, its erase time, the parity errors CFGR2 reports; EXTI: the internal lines' sources but PVD's; GPIO: EVENTOUT, the I/O compensation, the 5 V tolerant pins' clamps; the I/O thresholds are DS12288's typical characteristics (0.39 x VDD - 0.06 and 0.49 x VDD + 0.26, 200 mV of hysteresis, 40 kOhm pulls), not the guaranteed 0.3 and 0.7 x VDD; the output resistances and edge rates are the F446's; DBGMCU's REV_ID 0x2001 (revision Z: which revision a board carries varies, UM2505 10.1); a halted core draws its sleep current. +Declared omissions: the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, the I2Cs and SPIs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC; the timers' G4 additions: OCxM's fourth bit (retriggerable one-pulse, combined and asymmetric PWM), SMS's fourth bit (combined reset and trigger, the extended encoder modes), the internal trigger inputs ITR4 to ITR10 and TS's fifth bit, MMS's fourth bit, channels 5 and 6, dithering (DITHEN: ARR and CCRx read as their 16 integer bits), UIFREMAP, the encoder index (ECR), the asymmetric dead times (DTR2), break 2, the comparators on TISEL and AF1/AF2's break sources, the G4's ITR interconnection table (the F4's is used); the start-up times, flash times and PVD thresholds are DS12288 Rev 6's typical values (HSI16 0.8 us, an HSE crystal 2 ms, LSI 80 us, LSE 2 s, HSI48 2.5 us, the PLL's lock 15 us; a double word 81.7 us, a fast row 1.91 ms, a page erase 22.02 ms, a bank erase 22.13 ms; the PVD's thresholds), not their spread between parts or their dependence on temperature; RCC: the clock security systems (CSSON, LSECSSON: the oscillators never fail), LSEDRV, HSITRIM and HSI48CAL's effect on the frequencies, the CRS's trimming, a peripheral held in reset while its *RSTR bit stays set, the brownout reset (BORRSTF only at power-on), the sleep-mode enables (*SMENR), MCO and LSCO on their pins; PWR: the regulator's settling (VOSF never set) and the wake-up times, the supply currents, the PVMs (VDDA is VDD), UCPD's dead-battery bits, VBAT charging; FLASH: the option bytes' programming time, the read protection's levels and their mass erase, PCROP and the securable area, ECC, the bank swap (BFB2, FB_MODE), the boot from SRAM, the power-down modes, the caches' real line length; USART: noise detection (NE never sets, ONEBIT does nothing), auto baud rate detection, TXINV and RXINV, DE's assertion and deassertion times (DEAT, DEDT), the synchronous slave, smartcard and IrDA modes, TCBGT; SYSCFG: SWPR's write protection of the CCM SRAM, its erase time, the parity errors CFGR2 reports; EXTI: the internal lines' sources but PVD's; GPIO: EVENTOUT, the I/O compensation, the 5 V tolerant pins' clamps; the I/O thresholds are DS12288's typical characteristics (0.39 x VDD - 0.06 and 0.49 x VDD + 0.26, 200 mV of hysteresis, 40 kOhm pulls), not the guaranteed 0.3 and 0.7 x VDD; the output resistances and edge rates are the F446's; DMA: the arbitration's delays and the bus matrix's timing (a request is served at once, a memory-to-memory item every two cycles), the DMAMUX inputs' two-cycle filter and the three cycles a CxCR or RGxCR write masks them for, the byte and half-word lanes duplicated for an APB peripheral that ignores the size, LPTIM1_OUT as a trigger and synchronisation input (LPTIM1 is not modelled); DBGMCU's REV_ID 0x2001 (revision Z: which revision a board carries varies, UM2505 10.1); a halted core draws its sleep current. diff --git a/tests/unit/test_analog.c b/tests/unit/test_analog.c index 02d46e602..31784d73e 100644 --- a/tests/unit/test_analog.c +++ b/tests/unit/test_analog.c @@ -1587,7 +1587,10 @@ static void test_quiet_island(void) CHECK_NEAR(v_of(&e, "out"), 5.0 * (1.0 - exp(-2.0)), 1e-4); CHECK_EQ(isl->quiet_steps, 0); CHECK(esk_engine_advance(&e, 40 * ES_PS_PER_MS) == ES_OK); - CHECK_NEAR(v_of(&e, "out"), 5.0, 1e-6); /* to vntol, the floor where an island is still */ + /* to the floor where an island is still: a trial step of 1 ms moving no + * node by vntol (1 uV) and no branch current by 1 nA, here the source's + * 1.5 nA into the capacitor, 1.5 uV short of 5 V */ + CHECK_NEAR(v_of(&e, "out"), 5.0, 2e-6); CHECK_EQ(diag_errors, 0); esk_engine_free(&e); } diff --git a/tests/unit/test_stm32g4.c b/tests/unit/test_stm32g4.c index 18b303391..c09fba6ce 100644 --- a/tests/unit/test_stm32g4.c +++ b/tests/unit/test_stm32g4.c @@ -764,6 +764,163 @@ static void test_spsel_in_handler(void) g4_close(&f); } +/* DMA1 and DMAMUX (RM0440 12, 13) */ +#define DMA1 0x40020000u +#define DMA_ISR (DMA1 + 0x00u) +#define DMA_IFCR (DMA1 + 0x04u) +#define DMA_CCR(k) (DMA1 + 0x08u + 0x14u * ((k) - 1u)) +#define DMA_CNDTR(k) (DMA1 + 0x0Cu + 0x14u * ((k) - 1u)) +#define DMA_CPAR(k) (DMA1 + 0x10u + 0x14u * ((k) - 1u)) +#define DMA_CMAR(k) (DMA1 + 0x14u + 0x14u * ((k) - 1u)) +#define DMAMUX 0x40020800u +#define MUX_CCR(c) (DMAMUX + 0x04u * (c)) +#define MUX_CSR (DMAMUX + 0x80u) +#define MUX_CFR (DMAMUX + 0x84u) +#define MUX_RGCR(c) (DMAMUX + 0x100u + 0x04u * (c)) +#define NVIC_ISPR0 0xE000E200u + +static void pc13(g4 *f, int level) +{ + f->ext[2][13] = level; + esk_stm32f4_pins_changed(&f->m); +} + +static void test_dma(void) +{ + g4 f; + u32 v, k; + if (!g4_open(&f)) + return; + wr(&f, RCC_AHB1ENR, rd(&f, RCC_AHB1ENR) | 1u | 1u << 2); /* DMA1EN, DMAMUX1EN */ + /* memory to memory: eight words, both addresses stepping, TCIE */ + for (k = 0; k < 8; k++) + CHECK_EQ(esk_bus_debug_write(&f.m.bus, 0x20000100u + 4u * k, 4, 0x11110000u + k), 0); + wr(&f, DMA_CPAR(1), 0x20000100u); + wr(&f, DMA_CMAR(1), 0x20000200u); + wr(&f, DMA_CNDTR(1), 8u); + wr(&f, DMA_CCR(1), 1u << 14 | 2u << 10 | 2u << 8 | 1u << 7 | 1u << 6 | 1u << 1); /* MEM2MEM, 32-bit, MINC, PINC, TCIE */ + wr(&f, DMA_CCR(1), rd(&f, DMA_CCR(1)) | 1u); + /* while EN: the sizes and CNDTR keep their values */ + wr(&f, DMA_CCR(1), (rd(&f, DMA_CCR(1)) & ~(3u << 8)) | 0u << 8); + CHECK_EQ(rd(&f, DMA_CCR(1)) >> 8 & 3u, 2u); + run_us(&f, 20.0); + for (k = 0; k < 8; k++) { + CHECK_EQ(esk_bus_debug_read(&f.m.bus, 0x20000200u + 4u * k, 4, &v), 0); + CHECK_EQ(v, 0x11110000u + k); + } + CHECK_EQ(rd(&f, DMA_CNDTR(1)), 0u); + CHECK_EQ(rd(&f, DMA_ISR) & 0xFu, 0x7u); /* GIF1, TCIF1, HTIF1 */ + CHECK_EQ(rd(&f, DMA_CCR(1)) & 1u, 1u); /* not circular: EN stays, nothing more is served */ + CHECK(rd(&f, NVIC_ISPR0) & 1u << 11); /* DMA1_CH1 */ + wr(&f, DMA_CNDTR(1), 5u); + CHECK_EQ(rd(&f, DMA_CNDTR(1)), 0u); /* read-only while EN */ + wr(&f, DMA_IFCR, 1u << 1); /* CTCIF1: HTIF1 is left, so GIF1 too */ + CHECK_EQ(rd(&f, DMA_ISR) & 0xFu, 0x5u); + wr(&f, DMA_IFCR, 1u); /* CGIF1 */ + CHECK_EQ(rd(&f, DMA_ISR) & 0xFu, 0u); + wr(&f, DMA_CCR(1), 0u); + /* table 89: bytes read, half-words written zero-extended */ + CHECK_EQ(esk_bus_debug_write(&f.m.bus, 0x20000300u, 4, 0x44332211u), 0); + wr(&f, DMA_CPAR(1), 0x20000300u); + wr(&f, DMA_CMAR(1), 0x20000400u); + wr(&f, DMA_CNDTR(1), 4u); + wr(&f, DMA_CCR(1), 1u << 14 | 1u << 10 | 0u << 8 | 1u << 7 | 1u << 6 | 1u); + run_us(&f, 10.0); + CHECK_EQ(esk_bus_debug_read(&f.m.bus, 0x20000400u, 4, &v), 0); + CHECK_EQ(v, 0x00220011u); + CHECK_EQ(esk_bus_debug_read(&f.m.bus, 0x20000404u, 4, &v), 0); + CHECK_EQ(v, 0x00440033u); + wr(&f, DMA_CCR(1), 0u); + wr(&f, DMA_IFCR, 0xFFFFFFFFu); + /* LPUART1_TX (request 35) through DMAMUX channel 0 to DMA1 channel 1 */ + lpuart_setup(&f, 16000000u); + CHECK(wait_bits(&f, LPUART1 + U_ISR, 1u << 21, 1, 100) >= 0); /* TEACK */ + CHECK_EQ(esk_bus_debug_write(&f.m.bus, 0x20000500u, 4, 0x00214948u), 0); /* "HI!" */ + wr(&f, MUX_CCR(0), 35u); + wr(&f, DMA_CPAR(1), LPUART1 + U_TDR); + wr(&f, DMA_CMAR(1), 0x20000500u); + wr(&f, DMA_CNDTR(1), 3u); + wr(&f, DMA_CCR(1), 1u << 7 | 1u << 4 | 1u); /* MINC, DIR (from memory), EN */ + f.nframe = 0; + wr(&f, LPUART1 + U_CR3, rd(&f, LPUART1 + U_CR3) | 1u << 7); /* DMAT */ + run_us(&f, 400.0); + CHECK_EQ(f.nframe, 3); + CHECK_EQ(f.frame[0].c, 'H'); + CHECK_EQ(f.frame[2].c, '!'); + CHECK_EQ(rd(&f, DMA_CNDTR(1)), 0u); + wr(&f, DMA_CCR(1), 0u); + wr(&f, DMA_IFCR, 0xFFFFFFFFu); + /* synchronised on EXTI13 (PC13's rising edge): two requests (NBREQ 1) + * a sync event, an event each two; the event (input 16) triggers + * generator 0, whose request (1) DMA1 channel 2 serves */ + wr(&f, RCC_AHB2ENR, rd(&f, RCC_AHB2ENR) | 1u << 2); + wr(&f, RCC_APB2ENR, rd(&f, RCC_APB2ENR) | 1u); /* SYSCFG */ + wr(&f, SYSCFG + 0x14u, 2u << 4); /* EXTI13 on PC */ + wr(&f, GPIOC + MODER, rd(&f, GPIOC + MODER) & ~(3u << 26)); /* PC13 an input */ + pc13(&f, 0); + for (k = 0; k < 8; k++) + CHECK_EQ(esk_bus_debug_write(&f.m.bus, 0x20000600u + k, 1, 'a' + k), 0); + wr(&f, MUX_CCR(0), 35u | 1u << 9 | 1u << 16 | 1u << 17 | 1u << 19 | 13u << 24); /* EGE, SE, SPOL rising, NBREQ 1, SYNC_ID 13 */ + wr(&f, MUX_RGCR(0), 16u | 1u << 16 | 1u << 17); /* SIG_ID 16 (channel 0's event), GE, rising */ + wr(&f, MUX_CCR(1), 1u); /* DMAMUX_REQ_GEN0 to DMA1 channel 2 */ + wr(&f, DMA_CPAR(2), 0x20000700u); + wr(&f, DMA_CMAR(2), 0x20000800u); + wr(&f, DMA_CNDTR(2), 4u); + wr(&f, DMA_CCR(2), 2u << 10 | 2u << 8 | 1u << 7 | 1u); /* 32-bit, MINC: one word a generated request */ + wr(&f, DMA_CMAR(1), 0x20000600u); + wr(&f, DMA_CNDTR(1), 8u); + wr(&f, DMA_CCR(1), 1u << 7 | 1u << 4 | 1u); + f.nframe = 0; + run_us(&f, 400.0); + CHECK_EQ(f.nframe, 0); /* no sync event yet */ + CHECK_EQ(rd(&f, DMA_CNDTR(2)), 4u); + pc13(&f, 1); + run_us(&f, 400.0); + CHECK_EQ(f.nframe, 2); /* NBREQ + 1 */ + CHECK_EQ(f.frame[1].c, 'b'); + CHECK_EQ(rd(&f, DMA_CNDTR(2)), 3u); /* the event's generated request */ + pc13(&f, 0); + pc13(&f, 1); + run_us(&f, 400.0); + CHECK_EQ(f.nframe, 4); + CHECK_EQ(f.frame[3].c, 'd'); + CHECK_EQ(rd(&f, DMA_CNDTR(2)), 2u); + CHECK_EQ(rd(&f, MUX_CSR), 0u); + /* four requests a sync event (NBREQ 3, written with SE and EGE clear): + * an idle transmitter takes two at once, the others a frame apart, so + * a sync event right after the first is an overrun: SOF0, DMAMUX_OVR + * (94) with SOIE */ + wr(&f, MUX_CCR(0), 35u); + wr(&f, MUX_CCR(0), 35u | 3u << 19); + wr(&f, MUX_CCR(0), 35u | 3u << 19 | 1u << 8 | 1u << 16 | 1u << 17 | 13u << 24); + run_us(&f, 400.0); + pc13(&f, 0); + pc13(&f, 1); + pc13(&f, 0); + pc13(&f, 1); + CHECK_EQ(rd(&f, MUX_CSR), 1u); + CHECK(rd(&f, NVIC_ISPR2) & 1u << 30); + wr(&f, MUX_CFR, 1u); + CHECK_EQ(rd(&f, MUX_CSR), 0u); + wr(&f, MUX_CCR(0), 0u); + wr(&f, DMA_CCR(1), 0u); + wr(&f, DMA_CCR(2), 0u); + /* a bus error: TEIF, EN cleared and refused until TEIF is */ + wr(&f, DMA_IFCR, 0xFFFFFFFFu); + wr(&f, DMA_CPAR(1), 0x60000000u); /* no FMC bank fitted */ + wr(&f, DMA_CMAR(1), 0x20000900u); + wr(&f, DMA_CNDTR(1), 2u); + wr(&f, DMA_CCR(1), 1u << 14 | 1u << 3 | 1u); + run_us(&f, 5.0); + CHECK_EQ(rd(&f, DMA_ISR) & 0x9u, 0x9u); /* TEIF1, GIF1 */ + CHECK_EQ(rd(&f, DMA_CCR(1)) & 1u, 0u); + wr(&f, DMA_CCR(1), rd(&f, DMA_CCR(1)) | 1u); + CHECK_EQ(rd(&f, DMA_CCR(1)) & 1u, 0u); + wr(&f, DMA_IFCR, 1u << 3); + wr(&f, DMA_CCR(1), 0u); + g4_close(&f); +} + TEST_MAIN_BEGIN RUN(test_reset); RUN(test_170mhz); @@ -779,4 +936,5 @@ RUN(test_iwdg_window); RUN(test_wwdg_prescaler); RUN(test_stop); RUN(test_spsel_in_handler); +RUN(test_dma); TEST_MAIN_END diff --git a/tests/vendor/README.md b/tests/vendor/README.md index 2ba80dd39..1811092b6 100644 --- a/tests/vendor/README.md +++ b/tests/vendor/README.md @@ -11,7 +11,7 @@ toolchains. | `arduino/` | ArduinoCore-avr (Blink, a tour of the core) | `emblink/arduino_uno` | | `stm32cube/` | ST's STM32F1 HAL and CMSIS device files | `emblink/bluepill` | | `stm32cubef4/` | STM32CubeF4's own examples for the NUCLEO-F446RE (GPIO, HAL time bases, RCC, RTC, timers, UART, PWR's low-power modes, I2C between two boards, EEPROM emulation in flash) and, with `--board nucleo_f446ze`, for the NUCLEO-F446ZE (ADC, CRC, Cortex, DMA, flash erase and program, GPIO, the watchdogs, RTC, seven timer examples, UART, the USB device HID mouse on a computer's port, the USB host HID and MSC demos with Adafruit's 1.8" TFT shield, a mouse and a flash drive; their middleware and components, stm32-mw-usb-device v2.11.4, stm32-mw-usb-host, stm32-mw-fatfs, stm32-st7735 and stm32-bsp-common at the commits CubeF4 pins, fetched like the rest and copied into CubeF4's tree, with its Adafruit_Shield BSP and Utilities' LCD log and fonts) | `emblink/nucleo_f446re`, `emblink/nucleo_f446ze` | -| `stm32cubeg4/` | STM32CubeG4's own examples for the NUCLEO-G474RE (GPIO, EXTI, the HAL's time base, RCC, UART on LPUART1, CRC, Cortex, flash erase, program and fast program, the IWDG and WWDG, Stop 0, TIM1's PWM and output compare), built from a CubeG4 checkout with its HAL, CMSIS device and Nucleo BSP submodules | `emblink/nucleo_g474re` | +| `stm32cubeg4/` | STM32CubeG4's own examples for the NUCLEO-G474RE (GPIO, EXTI, the HAL's time base, RCC, UART on LPUART1, CRC, Cortex, flash erase, program and fast program, the IWDG and WWDG, Stop 0, TIM1's PWM and output compare, DMA memory to memory and with USART2 and LPUART1), built from a CubeG4 checkout with its HAL, CMSIS device and Nucleo BSP submodules | `emblink/nucleo_g474re` | | `pico-sdk/` | The Raspberry Pi Pico SDK | `emblink/pico` | | `micropython/` | MicroPython v1.24.1's rp2 port (RPI_PICO), built with its own Makefile and copied as firmware.uf2 onto the Pico's BOOTSEL drive; its prompt over its USB serial port: arithmetic, `machine.Pin` lighting the LED, a file in its flash filesystem | `emblink/pico` | | `freedom-metal/` | SiFive's freedom-metal and freedom-e-sdk's examples | `emblink/hifive1_revb` | diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/dma_copyfromflashtomemory_init/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/dma_copyfromflashtomemory_init/scenario.json new file mode 100644 index 000000000..b13cd5207 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/dma_copyfromflashtomemory_init/scenario.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "dma_copyfromflashtomemory_init", + "until": "300ms", + "description": "DMA_CopyFromFlashToMemory_Init (LL): DMA1 channel 1 copies 32 words from the flash to the SRAM in memory-to-memory mode; once the transfer-complete interrupt has come, the program compares the two buffers and lights LD2 when they match (it blinks LD2 on a mismatch or a transfer error).", + "inputs": [], + "assertions": [ + { + "id": "done", + "between": [ + "50ms", + "290ms" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/dma_flashtoram/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/dma_flashtoram/scenario.json new file mode 100644 index 000000000..080ba284b --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/dma_flashtoram/scenario.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "dma_flashtoram", + "until": "300ms", + "description": "DMA_FLASHToRAM: DMA1 channel 1 in memory-to-memory mode copies 32 words from the flash to the SRAM, started by software; the transfer-complete interrupt's callback lights LD2 (a transfer error would blink it).", + "inputs": [], + "assertions": [ + { + "id": "done", + "between": [ + "50ms", + "290ms" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/uart_hyperterminal_dma/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/uart_hyperterminal_dma/scenario.json new file mode 100644 index 000000000..cef1d11e2 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/uart_hyperterminal_dma/scenario.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "uart_hyperterminal_dma", + "until": "400ms", + "description": "UART_HyperTerminal_DMA: USART2 on PA2/PA3, the pins the STLINK-V3E's virtual COM port is wired to, at 9600 baud with 7 data bits and odd parity; the start message goes out by DMA, ten characters typed come in by DMA and go back out by DMA, then the end message, and LD2 lights.", + "inputs": [ + { + "at": "150ms", + "target": "B1", + "input": "serial", + "value": "0123456789" + } + ], + "assertions": [ + { + "id": "start", + "at": "140ms", + "probe": "console", + "expect": { + "contains": "Enter 10 characters using keyboard :" + } + }, + { + "id": "echo", + "at": "390ms", + "probe": "console", + "expect": { + "contains": "keyboard :\n\r0123456789" + } + }, + { + "id": "end", + "at": "390ms", + "probe": "console", + "expect": { + "contains": "Example Finished" + } + }, + { + "id": "done", + "between": [ + "350ms", + "395ms" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/uart_receptiontoidle_circulardma/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/uart_receptiontoidle_circulardma/scenario.json new file mode 100644 index 000000000..e6b81a0c5 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/uart_receptiontoidle_circulardma/scenario.json @@ -0,0 +1,47 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "uart_receptiontoidle_circulardma", + "until": "200ms", + "description": "UART_ReceptionToIdle_CircularDMA: LPUART1 receives into a 20-byte buffer by circular DMA, the HAL calling back on the half-transfer, the transfer-complete and the line going idle; each chunk is echoed. Text typed on the STLINK-V3E's virtual COM port comes back whole, also when it wraps the buffer.", + "inputs": [ + { + "at": "50ms", + "target": "B1", + "input": "serial", + "value": "hello" + }, + { + "at": "100ms", + "target": "B1", + "input": "serial", + "value": "The quick brown fox jumps over the lazy dog" + } + ], + "assertions": [ + { + "id": "banner", + "at": "40ms", + "probe": "console", + "expect": { + "contains": "USART Example : Enter characters to fill reception buffers." + } + }, + { + "id": "idle-echo", + "at": "90ms", + "probe": "console", + "expect": { + "contains": "reception buffers.\r\n\u0000hello" + } + }, + { + "id": "wrapping-echo", + "at": "190ms", + "probe": "console", + "expect": { + "contains": "helloThe quick brown fox jumps over the lazy dog" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/run.py b/tests/vendor/stm32cubeg4/run.py index 444dec266..5f72635a9 100644 --- a/tests/vendor/stm32cubeg4/run.py +++ b/tests/vendor/stm32cubeg4/run.py @@ -46,6 +46,8 @@ "crc_data_reversing_16bit_crc": NUCLEO + "Examples/CRC/CRC_Data_Reversing_16bit_CRC", "crc_example": NUCLEO + "Examples/CRC/CRC_Example", "crc_userdefinedpolynomial": NUCLEO + "Examples/CRC/CRC_UserDefinedPolynomial", + "dma_copyfromflashtomemory_init": NUCLEO + "Examples_LL/DMA/DMA_CopyFromFlashToMemory_Init", + "dma_flashtoram": NUCLEO + "Examples/DMA/DMA_FLASHToRAM", "flash_eraseprogram": NUCLEO + "Examples/FLASH/FLASH_EraseProgram", "flash_fastprogram": NUCLEO + "Examples/FLASH/FLASH_FastProgram", "gpio_exti": NUCLEO + "Examples/GPIO/GPIO_EXTI", @@ -57,7 +59,9 @@ "rcc_clockconfig": NUCLEO + "Examples/RCC/RCC_ClockConfig", "tim_octoggle": NUCLEO + "Examples/TIM/TIM_OCToggle", "tim_pwmoutput": NUCLEO + "Examples/TIM/TIM_PWMOutput", + "uart_hyperterminal_dma": NUCLEO + "Examples/UART/UART_HyperTerminal_DMA", "uart_printf": NUCLEO + "Examples/UART/UART_Printf", + "uart_receptiontoidle_circulardma": NUCLEO + "Examples/UART/UART_ReceptionToIdle_CircularDMA", "wwdg_example": NUCLEO + "Examples/WWDG/WWDG_Example", } BOARD_DIR = HERE / "nucleo_g474re" From 932997a3e5e48ed535a7f23820d9a39368e272b2 Mon Sep 17 00:00:00 2001 From: Junior Deogracias Date: Fri, 13 Nov 2026 04:32:31 +0100 Subject: [PATCH 10/10] The FIFO SPI (STM32G4's SPI1 to SPI4); a new AF hears its pin spi.c learned RM0440 42's SPI: 4 to 16-bit frames (DS, 8 bits forced for the values not used), the 32-bit transmit and receive FIFOs (TXE at half, RXNE at FRXTH's threshold, FTLVL, FRLVL, OVR when full), packed 16-bit accesses to DR, LDMA_TX and LDMA_RX, CRCL's CRC8 and CRC16 (two frames after 8-bit data), NSSP's pulse. test_stm32g4 covers it, and CubeG4's SPI_FullDuplex_ComPolling and _ComDMA run on two boards (run.py builds an example's _Master and _Slave projects; 26 examples). SPI_FullDuplex_ComIT stays out: the master's fourth byte loses a bit, the slave's MISO change in its TXE interrupt reaching the line late. gpio_f4.c: a pin given another alternate function hears its level at once; SPI1_SCK on PB3, after the reset's AF0, saw no level until the first edge, which a slave took as its baseline. The board's fidelity declares that its resistors are wires in the functional policy (LD2 and B1 work in the electrical one). --- CHANGELOG.md | 10 + catalog/boards/nucleo_g474re/board.json | 8 +- catalog/mcus/st/stm32g474re/mcu.json | 17 +- core/mcu/stm32/dma_f4.c | 1 + core/mcu/stm32/gpio_f4.c | 7 +- core/mcu/stm32/spi.c | 234 ++++++++++++++++-- core/mcu/stm32/stm32.h | 1 + docs/STATUS.md | 23 +- docs/coverage.md | 14 +- tests/unit/test_stm32g4.c | 88 +++++++ tests/vendor/README.md | 2 +- .../spi_fullduplex_comdma/scenario.json | 58 +++++ .../spi_fullduplex_compolling/scenario.json | 58 +++++ .../stm32cubeg4/nucleo_g474re/two_boards.json | 133 ++++++++++ tests/vendor/stm32cubeg4/run.py | 35 ++- 15 files changed, 643 insertions(+), 46 deletions(-) create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/spi_fullduplex_comdma/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/spi_fullduplex_compolling/scenario.json create mode 100644 tests/vendor/stm32cubeg4/nucleo_g474re/two_boards.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 175e822bf..4dc03ecab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,16 @@ versions follow semantic versioning. There is no release yet. TEIF), DMAMUX's sixteen channels on any of the 115 request lines, their synchronisation on an EXTI line or a channel's event with NBREQ and SOF, event generation, the four request generators with OF, DMAMUX_OVR. +- The SPI model learned the FIFO SPI of the STM32G4 (RM0440 42, and the + F0, F3, F7 and L4's): 4 to 16-bit frames, the 32-bit FIFOs with TXE, + FRXTH's RXNE threshold, FTLVL, FRLVL and OVR, packed 16-bit accesses, + LDMA_TX and LDMA_RX, CRCL's CRC8 and CRC16, NSSP; the G474RE's SPI1 to + SPI4 use it. CubeG4's SPI_FullDuplex_ComPolling and _ComDMA pairs run on + two boards (`tests/vendor/stm32cubeg4/run.py` builds an example's + _Master and _Slave projects; 26 examples). +- A pin given another alternate function hears its level at once: SPI1's + SCK on PB3, after the reset's AF0, saw no level until the first edge, and + a slave counted that edge as its baseline (STM32F4 and G4). - A board's console is the UART the firmware muxes onto its bridge's pins (`console.tx`, `console.rx`), not only the MCU's default unit: the NUCLEO-G474RE's VCP hears USART2 on PA2/PA3 as it hears LPUART1. diff --git a/catalog/boards/nucleo_g474re/board.json b/catalog/boards/nucleo_g474re/board.json index d2edf67ae..1de1dae9d 100644 --- a/catalog/boards/nucleo_g474re/board.json +++ b/catalog/boards/nucleo_g474re/board.json @@ -2088,7 +2088,8 @@ "the VCP's bytes reach the UART on PA2/PA3 directly, not as frames on PA3, whatever line settings the host's terminal has", "the 41 solder bridges are fixed in their factory state as UM2505's table 12 and the schematic give them (PA2/PA3 on the VCP, PC4/PC5 on D1/D0 and CN10 pins 35 and 37, PB8 on D15 and CN7 pin 7, B1 on PC13, the crystals on PF0/PF1 and PC14/PC15 and not on the morpho headers)", "a single JP5 or JP8 shunt sits on one position only; the switches here can all be closed", - "CubeG4's examples that take B1's falling edge (GPIO_EXTI and LL examples such as EXTI_ToggleLedOnIT_Init) act when B1 is released, as they would on the board: B1 is active high, their readmes say a press" + "CubeG4's examples that take B1's falling edge (GPIO_EXTI and LL examples such as EXTI_ToggleLedOnIT_Init) act when B1 is released, as they would on the board: B1 is active high, their readmes say a press", + "in the functional policy the board's resistors are wires, so R29 and R28 join PA5 to GND and R27 and R26 join PC13 to GND: LD2 and B1 work in the electrical policy only (a resistor that passes a weak level in the functional policy is not modelled yet)" ], "validation": [ "tests/*.json" @@ -2146,7 +2147,7 @@ ], "i18n": { "fr": { - "source": "991592de95bf", + "source": "873018dc7efe", "description": "La NUCLEO-G474RE de ST (MB1367) : un STM32G474RET6 avec le quartz HSE X3 de 24 MHz et le quartz LSE X2 de 32,768 kHz, la LED utilisateur verte LD2 sur PA5, le bouton bleu USER, actif au niveau haut, sur PC13, le bouton noir RESET, la LED d'alimentation verte LD3, JP5 choisissant l'USB du STLINK-V3E, VIN, E5V ou un chargeur USB, JP6 (IDD) pour mesurer le courant du MCU, les connecteurs Arduino Uno V3 et les deux connecteurs morpho ST. Le port COM virtuel du STLINK-V3E est la console série de la session sur le LPUART1 (PA2/PA3), et un port série sur l'hôte (embsim serve --serial).", "fidelity": { "functional": { @@ -2156,7 +2157,8 @@ "les octets du VCP arrivent directement à l'UART de PA2/PA3, pas comme des trames sur PA3, quels que soient les réglages de ligne du terminal de l'hôte", "les 41 ponts de soudure sont figés dans leur état d'usine tel que le donnent la table 12 de l'UM2505 et le schéma (PA2/PA3 sur le VCP, PC4/PC5 sur D1/D0 et les broches 35 et 37 de CN10, PB8 sur D15 et la broche 7 de CN7, B1 sur PC13, les quartz sur PF0/PF1 et PC14/PC15 et pas sur les connecteurs morpho)", "un seul cavalier JP5 ou JP8 ne tient que sur une position ; les interrupteurs ici peuvent tous être fermés", - "les exemples de CubeG4 qui prennent le front descendant de B1 (GPIO_EXTI et des exemples LL comme EXTI_ToggleLedOnIT_Init) agissent au relâchement de B1, comme ils le feraient sur la carte : B1 est actif au niveau haut, leur readme parle d'un appui" + "les exemples de CubeG4 qui prennent le front descendant de B1 (GPIO_EXTI et des exemples LL comme EXTI_ToggleLedOnIT_Init) agissent au relâchement de B1, comme ils le feraient sur la carte : B1 est actif au niveau haut, leur readme parle d'un appui", + "dans la politique fonctionnelle les résistances de la carte sont des fils, si bien que R29 et R28 relient PA5 à GND et R27 et R26 PC13 à GND : LD2 et B1 ne fonctionnent que dans la politique électrique (une résistance qui transmet un niveau faible dans la politique fonctionnelle n'est pas encore modélisée)" ] }, "timed": { diff --git a/catalog/mcus/st/stm32g474re/mcu.json b/catalog/mcus/st/stm32g474re/mcu.json index 61ade1db5..02cf02b4e 100644 --- a/catalog/mcus/st/stm32g474re/mcu.json +++ b/catalog/mcus/st/stm32g474re/mcu.json @@ -644,6 +644,10 @@ "match": "CRC", "model": "stm32-crc" }, + { + "match": "SPI*", + "model": "stm32-spi" + }, { "match": "DMA1", "model": "stm32g4-dma" @@ -2190,9 +2194,9 @@ }, "fidelity": { "functional": { - "claims": "Cortex-M4F instruction execution (Thumb-2 with ARMv7E-M's DSP instructions, FPv4-SP, NVIC with 4 priority bits, SCB, SysTick on HCLK/8, DWT, the MPU with eight regions, lazy floating-point context stacking, semihosting); every register of ST's STM32G474 SVD at its address with its reset value and access type, corrected where RM0440, the CMSIS header or the HAL differ (tools/importers/stm32g474_regs.sh lists the corrections); the memory map (512 KiB of dual-bank flash, SRAM1, SRAM2 and the CCM SRAM at 0x20018000 and its alias at 0x10000000, the system memory, OTP, the engineering bytes with the unique ID, flash size and calibration values, both banks' option bytes, the FDCAN message RAM and the USB packet memory). RCC (rcc_g4.c): HSI16, HSE ready only as the board drives OSC_IN (a crystal without HSEBYP, a clock with it), LSI, LSE and HSI48, each ready its start-up time after it is enabled, LSE kept through every reset but a power-on one; the main PLL from HSI16 or HSE (M, N, P with PLLPDIV, Q, R and their enables), SYSCLK from HSI16, HSE or PLLR switched once ready (SWS), HPRE, PPRE1, PPRE2 and the timers' clock; what the system clock uses cannot be turned off, HSEBYP is kept while HSE is on, BDCR is written only with PWR's DBP and BDRST resets the RTC and TAMP; CIER, CIFR and CICR's ready interrupts; the kernel clocks CCIPR and CCIPR2 select for the U(S)ARTs and LPUART, I2Cs, LPTIM1, SAI1, I2S, FDCAN, the 48 MHz clock, the ADCs and the QUADSPI; MCO's frequency; the peripherals' clock enables (their registers read 0 and ignore writes while off, mcu.clock_gated) and resets; RCC_CSR's reset flags (PINRSTF, BORRSTF, SFTRSTF, IWDGRSTF, WWDGRSTF, LPWRRSTF, OBLRSTF) until RMVF; a VCO, PLL output or SYSCLK outside DS12288's and the voltage range's limits and too few flash wait states for HCLK are reported (mcu.clock_out_of_spec, mcu.flash_wait_states, RM0440 table 9). PWR (pwr_g4.c): the voltage ranges and range 1's boost mode (CR5.R1MODE) bounding SYSCLK, low-power run's REGLPF, the PVD (PVDO against VDD, or PB7 against VREFINT, on EXTI line 16); Stop 0 and Stop 1 (the core's domain's clocks stopped but the RTC's and IWDG's, HSE and the PLL off, an EXTI line's interrupt or event waking the part on HSI16), Standby (RAM lost but SRAM2 with RRS, the pins let go but the pulls CR3.APC keeps from PUCRx/PDCRx and the wake-up pins', a wake-up pin's edge of CR4's polarity, an internal wake-up, NRST or the IWDG ending it with a reset, SR1.SBF), Shutdown (SRAM2 lost too, left through a brownout reset), the option bytes' nRST_STOP, nRST_STDBY and nRST_SHDW. FLASH (flash_g4.c): KEYR's and OPTKEYR's unlock, double-word programming with SIZERR, PGAERR, PGSERR, PROGERR and WRPERR, fast programming of 256-byte rows with MISSERR, page and bank erases, EOP and the error interrupt, BSY for DS12288's typical times, a program running from the bank under operation stalled while the other bank reads on (read-while-write), the option bytes with their complements (OPTVERR on a mismatch) loaded at each reset, OPTSTRT and OBL_LAUNCH's reset, the WRP areas, BOOT0 from PB8 or nBOOT0 with nSWBOOT0 (a system-memory boot reported, mcu.boot_mode), ACR's wait states, prefetch and caches as the fetch timing. GPIO (gpio_f4.c): MODER, OTYPER, OSPEEDR, PUPDR, IDR, ODR, BSRR, BRR, LCKR's lock, AFRL/AFRH choosing among io.alternate's functions, converted from ST's open pin data; SYSCFG's EXTICR, MEMRMP's boot remap and SCSR's CCM SRAM erase; EXTI (exti.c) in two banks: the configurable lines' edges, SWIER, PR, IMR and EMR, their interrupts by line, the direct lines as events. USART1-3, UART4-5 and LPUART1 (usart_v2.c): 7, 8 or 9 bits with parity, the stop bits, MSBFIRST and DATAINV on the line, PRESC and the kernel clock, OVER8, an LPUART's 256 x clock / BRR; TEACK and REACK, the 8-frame FIFOs with their thresholds and flags, TXE/TC, RXNE, ORE (or OVRDIS), PE, FE, IDLE, CMF, RTOF, break and LIN's LBDF, mute mode, nCTS and nRTS, DE for RS-485, SWAP, half-duplex, the synchronous master's CK, wake-up from Stop on HSI16 or LSE, DMA requests, every interrupt; the frames on the TX pin's waveform and decoded from the RX pin. The timers (tim.c, the F4's IP: time base, output compare and PWM, input capture with filters, complementary outputs with dead time and break, the slave modes and encoder, TRGO) with TISEL's internal clocks on TI1 (TIM16 and TIM17: LSI, LSE, HSE/32, MCO; TIM5: LSI, LSE; TIM15: LSE), DBGMCU's freeze bits by name; the programmable CRC (crc.c: POLYSIZE, POL, INIT, REV_IN, REV_OUT); the IWDG with its window (WINR) and the option bytes' hardware start and Stop/Standby freeze, the WWDG with WDGTB's three bits (wdg.c); DMA1 and DMA2 with DMAMUX (dma_g4.c): eight channels each, one item a request or memory to memory, PSIZE and MSIZE packed and unpacked as RM0440's table 89 gives, PINC, MINC, circular mode, HTIF, TCIF, TEIF and GIF with their interrupts, the bits locked while EN is set, a bus error clearing EN until TEIF is cleared; DMAMUX's sixteen channels taking any of the 115 request lines (DMAREQ_ID), synchronisation on an EXTI line or a channel's event (SE, SPOL, SYNC_ID, NBREQ, SOF), event generation (EGE), the four request generators (SIG_ID, GPOL, GNBREQ, OF) and DMAMUX_OVR; DBGMCU's IDCODE (0x469) and freeze registers.", + "claims": "Cortex-M4F instruction execution (Thumb-2 with ARMv7E-M's DSP instructions, FPv4-SP, NVIC with 4 priority bits, SCB, SysTick on HCLK/8, DWT, the MPU with eight regions, lazy floating-point context stacking, semihosting); every register of ST's STM32G474 SVD at its address with its reset value and access type, corrected where RM0440, the CMSIS header or the HAL differ (tools/importers/stm32g474_regs.sh lists the corrections); the memory map (512 KiB of dual-bank flash, SRAM1, SRAM2 and the CCM SRAM at 0x20018000 and its alias at 0x10000000, the system memory, OTP, the engineering bytes with the unique ID, flash size and calibration values, both banks' option bytes, the FDCAN message RAM and the USB packet memory). RCC (rcc_g4.c): HSI16, HSE ready only as the board drives OSC_IN (a crystal without HSEBYP, a clock with it), LSI, LSE and HSI48, each ready its start-up time after it is enabled, LSE kept through every reset but a power-on one; the main PLL from HSI16 or HSE (M, N, P with PLLPDIV, Q, R and their enables), SYSCLK from HSI16, HSE or PLLR switched once ready (SWS), HPRE, PPRE1, PPRE2 and the timers' clock; what the system clock uses cannot be turned off, HSEBYP is kept while HSE is on, BDCR is written only with PWR's DBP and BDRST resets the RTC and TAMP; CIER, CIFR and CICR's ready interrupts; the kernel clocks CCIPR and CCIPR2 select for the U(S)ARTs and LPUART, I2Cs, LPTIM1, SAI1, I2S, FDCAN, the 48 MHz clock, the ADCs and the QUADSPI; MCO's frequency; the peripherals' clock enables (their registers read 0 and ignore writes while off, mcu.clock_gated) and resets; RCC_CSR's reset flags (PINRSTF, BORRSTF, SFTRSTF, IWDGRSTF, WWDGRSTF, LPWRRSTF, OBLRSTF) until RMVF; a VCO, PLL output or SYSCLK outside DS12288's and the voltage range's limits and too few flash wait states for HCLK are reported (mcu.clock_out_of_spec, mcu.flash_wait_states, RM0440 table 9). PWR (pwr_g4.c): the voltage ranges and range 1's boost mode (CR5.R1MODE) bounding SYSCLK, low-power run's REGLPF, the PVD (PVDO against VDD, or PB7 against VREFINT, on EXTI line 16); Stop 0 and Stop 1 (the core's domain's clocks stopped but the RTC's and IWDG's, HSE and the PLL off, an EXTI line's interrupt or event waking the part on HSI16), Standby (RAM lost but SRAM2 with RRS, the pins let go but the pulls CR3.APC keeps from PUCRx/PDCRx and the wake-up pins', a wake-up pin's edge of CR4's polarity, an internal wake-up, NRST or the IWDG ending it with a reset, SR1.SBF), Shutdown (SRAM2 lost too, left through a brownout reset), the option bytes' nRST_STOP, nRST_STDBY and nRST_SHDW. FLASH (flash_g4.c): KEYR's and OPTKEYR's unlock, double-word programming with SIZERR, PGAERR, PGSERR, PROGERR and WRPERR, fast programming of 256-byte rows with MISSERR, page and bank erases, EOP and the error interrupt, BSY for DS12288's typical times, a program running from the bank under operation stalled while the other bank reads on (read-while-write), the option bytes with their complements (OPTVERR on a mismatch) loaded at each reset, OPTSTRT and OBL_LAUNCH's reset, the WRP areas, BOOT0 from PB8 or nBOOT0 with nSWBOOT0 (a system-memory boot reported, mcu.boot_mode), ACR's wait states, prefetch and caches as the fetch timing. GPIO (gpio_f4.c): MODER, OTYPER, OSPEEDR, PUPDR, IDR, ODR, BSRR, BRR, LCKR's lock, AFRL/AFRH choosing among io.alternate's functions, converted from ST's open pin data; SYSCFG's EXTICR, MEMRMP's boot remap and SCSR's CCM SRAM erase; EXTI (exti.c) in two banks: the configurable lines' edges, SWIER, PR, IMR and EMR, their interrupts by line, the direct lines as events. USART1-3, UART4-5 and LPUART1 (usart_v2.c): 7, 8 or 9 bits with parity, the stop bits, MSBFIRST and DATAINV on the line, PRESC and the kernel clock, OVER8, an LPUART's 256 x clock / BRR; TEACK and REACK, the 8-frame FIFOs with their thresholds and flags, TXE/TC, RXNE, ORE (or OVRDIS), PE, FE, IDLE, CMF, RTOF, break and LIN's LBDF, mute mode, nCTS and nRTS, DE for RS-485, SWAP, half-duplex, the synchronous master's CK, wake-up from Stop on HSI16 or LSE, DMA requests, every interrupt; the frames on the TX pin's waveform and decoded from the RX pin. The timers (tim.c, the F4's IP: time base, output compare and PWM, input capture with filters, complementary outputs with dead time and break, the slave modes and encoder, TRGO) with TISEL's internal clocks on TI1 (TIM16 and TIM17: LSI, LSE, HSE/32, MCO; TIM5: LSI, LSE; TIM15: LSE), DBGMCU's freeze bits by name; the programmable CRC (crc.c: POLYSIZE, POL, INIT, REV_IN, REV_OUT); the IWDG with its window (WINR) and the option bytes' hardware start and Stop/Standby freeze, the WWDG with WDGTB's three bits (wdg.c); DMA1 and DMA2 with DMAMUX (dma_g4.c): eight channels each, one item a request or memory to memory, PSIZE and MSIZE packed and unpacked as RM0440's table 89 gives, PINC, MINC, circular mode, HTIF, TCIF, TEIF and GIF with their interrupts, the bits locked while EN is set, a bus error clearing EN until TEIF is cleared; DMAMUX's sixteen channels taking any of the 115 request lines (DMAREQ_ID), synchronisation on an EXTI line or a channel's event (SE, SPOL, SYNC_ID, NBREQ, SOF), event generation (EGE), the four request generators (SIG_ID, GPOL, GNBREQ, OF) and DMAMUX_OVR; SPI1 to SPI4 (spi.c, the FIFO SPI): master and slave in the four modes, 4 to 16-bit frames (DS, 8 bits forced for the values not used), the 32-bit transmit and receive FIFOs (TXE at half, RXNE at FRXTH's threshold, FTLVL, FRLVL, OVR when full), 8-bit and 16-bit (packed) accesses to DR, LDMA_TX and LDMA_RX for an odd DMA count, CRC8 or CRC16 (CRCL, two frames after 8-bit data), the TI mode, NSSP's pulse, simplex and half duplex, MODF, the DMA requests; DBGMCU's IDCODE (0x469) and freeze registers.", "omissions": [ - "the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, the I2Cs and SPIs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC", + "the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, the I2Cs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC", "the timers' G4 additions: OCxM's fourth bit (retriggerable one-pulse, combined and asymmetric PWM), SMS's fourth bit (combined reset and trigger, the extended encoder modes), the internal trigger inputs ITR4 to ITR10 and TS's fifth bit, MMS's fourth bit, channels 5 and 6, dithering (DITHEN: ARR and CCRx read as their 16 integer bits), UIFREMAP, the encoder index (ECR), the asymmetric dead times (DTR2), break 2, the comparators on TISEL and AF1/AF2's break sources, the G4's ITR interconnection table (the F4's is used)", "the start-up times, flash times and PVD thresholds are DS12288 Rev 6's typical values (HSI16 0.8 us, an HSE crystal 2 ms, LSI 80 us, LSE 2 s, HSI48 2.5 us, the PLL's lock 15 us; a double word 81.7 us, a fast row 1.91 ms, a page erase 22.02 ms, a bank erase 22.13 ms; the PVD's thresholds), not their spread between parts or their dependence on temperature", "RCC: the clock security systems (CSSON, LSECSSON: the oscillators never fail), LSEDRV, HSITRIM and HSI48CAL's effect on the frequencies, the CRS's trimming, a peripheral held in reset while its *RSTR bit stays set, the brownout reset (BORRSTF only at power-on), the sleep-mode enables (*SMENR), MCO and LSCO on their pins", @@ -2201,7 +2205,7 @@ "USART: noise detection (NE never sets, ONEBIT does nothing), auto baud rate detection, TXINV and RXINV, DE's assertion and deassertion times (DEAT, DEDT), the synchronous slave, smartcard and IrDA modes, TCBGT", "SYSCFG: SWPR's write protection of the CCM SRAM, its erase time, the parity errors CFGR2 reports; EXTI: the internal lines' sources but PVD's; GPIO: EVENTOUT, the I/O compensation, the 5 V tolerant pins' clamps", "the I/O thresholds are DS12288's typical characteristics (0.39 x VDD - 0.06 and 0.49 x VDD + 0.26, 200 mV of hysteresis, 40 kOhm pulls), not the guaranteed 0.3 and 0.7 x VDD; the output resistances and edge rates are the F446's", - "DMA: the arbitration's delays and the bus matrix's timing (a request is served at once, a memory-to-memory item every two cycles), the DMAMUX inputs' two-cycle filter and the three cycles a CxCR or RGxCR write masks them for, the byte and half-word lanes duplicated for an APB peripheral that ignores the size, LPTIM1_OUT as a trigger and synchronisation input (LPTIM1 is not modelled)", "DBGMCU's REV_ID 0x2001 (revision Z: which revision a board carries varies, UM2505 10.1); a halted core draws its sleep current" + "SPI: I2S (I2SCFGR keeps its value), the multimaster arbitration a MODF serves beyond the fault", "DMA: the arbitration's delays and the bus matrix's timing (a request is served at once, a memory-to-memory item every two cycles), the DMAMUX inputs' two-cycle filter and the three cycles a CxCR or RGxCR write masks them for, the byte and half-word lanes duplicated for an APB peripheral that ignores the size, LPTIM1_OUT as a trigger and synchronisation input (LPTIM1 is not modelled)", "DBGMCU's REV_ID 0x2001 (revision Z: which revision a board carries varies, UM2505 10.1); a halted core draws its sleep current" ], "validation": [ "repo:tests/unit/test_stm32g4.c", @@ -2247,13 +2251,13 @@ }, "i18n": { "fr": { - "source": "bf0e43b70618", + "source": "05964646b243", "description": "STMicroelectronics STM32G474RE : un Arm Cortex-M4F jusqu'à 170 MHz avec MPU, 512 Kio de flash à double banc, 128 Kio de SRAM (80 Kio de SRAM1, 16 Kio de SRAM2, 32 Kio de CCM SRAM), ses accélérateurs mathématiques, son timer haute résolution et sa chaîne analogique, en LQFP64 ; le MCU de la NUCLEO-G474RE.", "fidelity": { "functional": { - "claims": "Exécution des instructions Cortex-M4F (Thumb-2 avec les instructions DSP de l'ARMv7E-M, FPv4-SP, NVIC à 4 bits de priorité, SCB, SysTick sur HCLK/8, DWT, la MPU à huit régions, l'empilement paresseux du contexte flottant, le semihosting) ; chaque registre du SVD STM32G474 de ST à son adresse avec sa valeur de reset et son type d'accès, corrigé là où le RM0440, l'en-tête CMSIS ou la HAL diffèrent (tools/importers/stm32g474_regs.sh liste les corrections) ; la carte mémoire (512 Kio de flash à double banc, la SRAM1, la SRAM2 et la CCM SRAM à 0x20018000 et son alias à 0x10000000, la mémoire système, l'OTP, les octets d'ingénierie avec l'identifiant unique, la taille de la flash et les valeurs d'étalonnage, les octets d'option des deux bancs, la RAM de messages des FDCAN et la mémoire de paquets de l'USB). RCC (rcc_g4.c) : HSI16, HSE prêt seulement si la carte pilote OSC_IN (un quartz sans HSEBYP, une horloge avec), LSI, LSE et HSI48, chacun prêt après son temps de démarrage une fois activé, LSE conservé à travers tout reset sauf la mise sous tension ; la PLL principale depuis HSI16 ou HSE (M, N, P avec PLLPDIV, Q, R et leurs activations), SYSCLK depuis HSI16, HSE ou PLLR, basculé une fois prêt (SWS), HPRE, PPRE1, PPRE2 et l'horloge des timers ; ce qu'utilise l'horloge système ne peut être éteint, HSEBYP est conservé tant que HSE est allumé, BDCR n'est écrit qu'avec le DBP du PWR et BDRST réinitialise le RTC et le TAMP ; les interruptions de disponibilité de CIER, CIFR et CICR ; les horloges noyau que sélectionnent CCIPR et CCIPR2 pour les U(S)ART et le LPUART, les I2C, le LPTIM1, le SAI1, l'I2S, les FDCAN, l'horloge 48 MHz, les ADC et le QUADSPI ; la fréquence du MCO ; les activations d'horloge des périphériques (leurs registres lisent 0 et ignorent les écritures quand elle est coupée, mcu.clock_gated) et leurs resets ; les indicateurs de reset de RCC_CSR (PINRSTF, BORRSTF, SFTRSTF, IWDGRSTF, WWDGRSTF, LPWRRSTF, OBLRSTF) jusqu'à RMVF ; un VCO, une sortie de PLL ou un SYSCLK hors des limites du DS12288 et de la plage de tension, et trop peu d'états d'attente de la flash pour HCLK, sont signalés (mcu.clock_out_of_spec, mcu.flash_wait_states, table 9 du RM0440). PWR (pwr_g4.c) : les plages de tension et le mode boost de la plage 1 (CR5.R1MODE) qui bornent SYSCLK, le REGLPF du low-power run, le PVD (PVDO face à VDD, ou PB7 face à VREFINT, sur la ligne EXTI 16) ; Stop 0 et Stop 1 (les horloges du domaine du cœur arrêtées sauf celles du RTC et de l'IWDG, HSE et la PLL éteints, l'interruption ou l'événement d'une ligne EXTI réveillant la puce sur HSI16), Standby (la RAM perdue sauf la SRAM2 avec RRS, les broches relâchées sauf les tirages que CR3.APC conserve depuis PUCRx/PDCRx et ceux des broches de réveil, un front de broche de réveil de la polarité de CR4, un réveil interne, NRST ou l'IWDG y mettant fin par un reset, SR1.SBF), Shutdown (la SRAM2 perdue aussi, quitté par un reset de brownout), les nRST_STOP, nRST_STDBY et nRST_SHDW des octets d'option. FLASH (flash_g4.c) : le déverrouillage par KEYR et OPTKEYR, la programmation par double mot avec SIZERR, PGAERR, PGSERR, PROGERR et WRPERR, la programmation rapide de rangées de 256 octets avec MISSERR, les effacements de page et de banc, EOP et l'interruption d'erreur, BSY pendant les temps typiques du DS12288, un programme qui s'exécute depuis le banc en opération bloqué tandis que l'autre banc reste lisible (lecture pendant l'écriture), les octets d'option avec leurs compléments (OPTVERR en cas de discordance) chargés à chaque reset, OPTSTRT et le reset d'OBL_LAUNCH, les zones WRP, BOOT0 depuis PB8 ou nBOOT0 selon nSWBOOT0 (un démarrage sur la mémoire système signalé, mcu.boot_mode), les états d'attente, le prefetch et les caches d'ACR dans le minutage des lectures d'instructions. GPIO (gpio_f4.c) : MODER, OTYPER, OSPEEDR, PUPDR, IDR, ODR, BSRR, BRR, le verrouillage de LCKR, AFRL/AFRH choisissant parmi les fonctions d'io.alternate, converties des données de broches ouvertes de ST ; l'EXTICR du SYSCFG, le remappage de démarrage de MEMRMP et l'effacement de la CCM SRAM par SCSR ; l'EXTI (exti.c) en deux bancs : les fronts des lignes configurables, SWIER, PR, IMR et EMR, leurs interruptions par ligne, les lignes directes comme événements. USART1-3, UART4-5 et LPUART1 (usart_v2.c) : 7, 8 ou 9 bits avec parité, les bits de stop, MSBFIRST et DATAINV sur la ligne, PRESC et l'horloge noyau, OVER8, le 256 x horloge / BRR d'un LPUART ; TEACK et REACK, les FIFO de 8 trames avec leurs seuils et indicateurs, TXE/TC, RXNE, ORE (ou OVRDIS), PE, FE, IDLE, CMF, RTOF, le break et le LBDF du LIN, le mode muet, nCTS et nRTS, DE pour le RS-485, SWAP, le half-duplex, le CK du maître synchrone, le réveil depuis Stop sur HSI16 ou LSE, les requêtes DMA, toutes les interruptions ; les trames sur la forme d'onde de la broche TX et décodées depuis la broche RX. Les timers (tim.c, l'IP du F4 : base de temps, comparaison de sortie et PWM, capture d'entrée avec filtres, sorties complémentaires avec temps mort et break, les modes esclaves et le codeur, TRGO) avec les horloges internes de TISEL sur TI1 (TIM16 et TIM17 : LSI, LSE, HSE/32, MCO ; TIM5 : LSI, LSE ; TIM15 : LSE), les bits de gel du DBGMCU trouvés par leur nom ; le CRC programmable (crc.c : POLYSIZE, POL, INIT, REV_IN, REV_OUT) ; l'IWDG avec sa fenêtre (WINR), le démarrage matériel et le gel en Stop/Standby des octets d'option, le WWDG avec les trois bits de WDGTB (wdg.c) ; DMA1 et DMA2 avec le DMAMUX (dma_g4.c) : huit canaux chacun, un élément par requête ou de mémoire à mémoire, PSIZE et MSIZE assemblés et désassemblés comme le donne la table 89 du RM0440, PINC, MINC, le mode circulaire, HTIF, TCIF, TEIF et GIF avec leurs interruptions, les bits verrouillés tant qu'EN est à 1, une erreur de bus remettant EN à 0 jusqu'à ce que TEIF soit effacé ; les seize canaux du DMAMUX prenant n'importe laquelle des 115 lignes de requête (DMAREQ_ID), la synchronisation sur une ligne EXTI ou l'événement d'un canal (SE, SPOL, SYNC_ID, NBREQ, SOF), la génération d'événements (EGE), les quatre générateurs de requêtes (SIG_ID, GPOL, GNBREQ, OF) et DMAMUX_OVR ; l'IDCODE du DBGMCU (0x469) et ses registres de gel.", + "claims": "Exécution des instructions Cortex-M4F (Thumb-2 avec les instructions DSP de l'ARMv7E-M, FPv4-SP, NVIC à 4 bits de priorité, SCB, SysTick sur HCLK/8, DWT, la MPU à huit régions, l'empilement paresseux du contexte flottant, le semihosting) ; chaque registre du SVD STM32G474 de ST à son adresse avec sa valeur de reset et son type d'accès, corrigé là où le RM0440, l'en-tête CMSIS ou la HAL diffèrent (tools/importers/stm32g474_regs.sh liste les corrections) ; la carte mémoire (512 Kio de flash à double banc, la SRAM1, la SRAM2 et la CCM SRAM à 0x20018000 et son alias à 0x10000000, la mémoire système, l'OTP, les octets d'ingénierie avec l'identifiant unique, la taille de la flash et les valeurs d'étalonnage, les octets d'option des deux bancs, la RAM de messages des FDCAN et la mémoire de paquets de l'USB). RCC (rcc_g4.c) : HSI16, HSE prêt seulement si la carte pilote OSC_IN (un quartz sans HSEBYP, une horloge avec), LSI, LSE et HSI48, chacun prêt après son temps de démarrage une fois activé, LSE conservé à travers tout reset sauf la mise sous tension ; la PLL principale depuis HSI16 ou HSE (M, N, P avec PLLPDIV, Q, R et leurs activations), SYSCLK depuis HSI16, HSE ou PLLR, basculé une fois prêt (SWS), HPRE, PPRE1, PPRE2 et l'horloge des timers ; ce qu'utilise l'horloge système ne peut être éteint, HSEBYP est conservé tant que HSE est allumé, BDCR n'est écrit qu'avec le DBP du PWR et BDRST réinitialise le RTC et le TAMP ; les interruptions de disponibilité de CIER, CIFR et CICR ; les horloges noyau que sélectionnent CCIPR et CCIPR2 pour les U(S)ART et le LPUART, les I2C, le LPTIM1, le SAI1, l'I2S, les FDCAN, l'horloge 48 MHz, les ADC et le QUADSPI ; la fréquence du MCO ; les activations d'horloge des périphériques (leurs registres lisent 0 et ignorent les écritures quand elle est coupée, mcu.clock_gated) et leurs resets ; les indicateurs de reset de RCC_CSR (PINRSTF, BORRSTF, SFTRSTF, IWDGRSTF, WWDGRSTF, LPWRRSTF, OBLRSTF) jusqu'à RMVF ; un VCO, une sortie de PLL ou un SYSCLK hors des limites du DS12288 et de la plage de tension, et trop peu d'états d'attente de la flash pour HCLK, sont signalés (mcu.clock_out_of_spec, mcu.flash_wait_states, table 9 du RM0440). PWR (pwr_g4.c) : les plages de tension et le mode boost de la plage 1 (CR5.R1MODE) qui bornent SYSCLK, le REGLPF du low-power run, le PVD (PVDO face à VDD, ou PB7 face à VREFINT, sur la ligne EXTI 16) ; Stop 0 et Stop 1 (les horloges du domaine du cœur arrêtées sauf celles du RTC et de l'IWDG, HSE et la PLL éteints, l'interruption ou l'événement d'une ligne EXTI réveillant la puce sur HSI16), Standby (la RAM perdue sauf la SRAM2 avec RRS, les broches relâchées sauf les tirages que CR3.APC conserve depuis PUCRx/PDCRx et ceux des broches de réveil, un front de broche de réveil de la polarité de CR4, un réveil interne, NRST ou l'IWDG y mettant fin par un reset, SR1.SBF), Shutdown (la SRAM2 perdue aussi, quitté par un reset de brownout), les nRST_STOP, nRST_STDBY et nRST_SHDW des octets d'option. FLASH (flash_g4.c) : le déverrouillage par KEYR et OPTKEYR, la programmation par double mot avec SIZERR, PGAERR, PGSERR, PROGERR et WRPERR, la programmation rapide de rangées de 256 octets avec MISSERR, les effacements de page et de banc, EOP et l'interruption d'erreur, BSY pendant les temps typiques du DS12288, un programme qui s'exécute depuis le banc en opération bloqué tandis que l'autre banc reste lisible (lecture pendant l'écriture), les octets d'option avec leurs compléments (OPTVERR en cas de discordance) chargés à chaque reset, OPTSTRT et le reset d'OBL_LAUNCH, les zones WRP, BOOT0 depuis PB8 ou nBOOT0 selon nSWBOOT0 (un démarrage sur la mémoire système signalé, mcu.boot_mode), les états d'attente, le prefetch et les caches d'ACR dans le minutage des lectures d'instructions. GPIO (gpio_f4.c) : MODER, OTYPER, OSPEEDR, PUPDR, IDR, ODR, BSRR, BRR, le verrouillage de LCKR, AFRL/AFRH choisissant parmi les fonctions d'io.alternate, converties des données de broches ouvertes de ST ; l'EXTICR du SYSCFG, le remappage de démarrage de MEMRMP et l'effacement de la CCM SRAM par SCSR ; l'EXTI (exti.c) en deux bancs : les fronts des lignes configurables, SWIER, PR, IMR et EMR, leurs interruptions par ligne, les lignes directes comme événements. USART1-3, UART4-5 et LPUART1 (usart_v2.c) : 7, 8 ou 9 bits avec parité, les bits de stop, MSBFIRST et DATAINV sur la ligne, PRESC et l'horloge noyau, OVER8, le 256 x horloge / BRR d'un LPUART ; TEACK et REACK, les FIFO de 8 trames avec leurs seuils et indicateurs, TXE/TC, RXNE, ORE (ou OVRDIS), PE, FE, IDLE, CMF, RTOF, le break et le LBDF du LIN, le mode muet, nCTS et nRTS, DE pour le RS-485, SWAP, le half-duplex, le CK du maître synchrone, le réveil depuis Stop sur HSI16 ou LSE, les requêtes DMA, toutes les interruptions ; les trames sur la forme d'onde de la broche TX et décodées depuis la broche RX. Les timers (tim.c, l'IP du F4 : base de temps, comparaison de sortie et PWM, capture d'entrée avec filtres, sorties complémentaires avec temps mort et break, les modes esclaves et le codeur, TRGO) avec les horloges internes de TISEL sur TI1 (TIM16 et TIM17 : LSI, LSE, HSE/32, MCO ; TIM5 : LSI, LSE ; TIM15 : LSE), les bits de gel du DBGMCU trouvés par leur nom ; le CRC programmable (crc.c : POLYSIZE, POL, INIT, REV_IN, REV_OUT) ; l'IWDG avec sa fenêtre (WINR), le démarrage matériel et le gel en Stop/Standby des octets d'option, le WWDG avec les trois bits de WDGTB (wdg.c) ; DMA1 et DMA2 avec le DMAMUX (dma_g4.c) : huit canaux chacun, un élément par requête ou de mémoire à mémoire, PSIZE et MSIZE assemblés et désassemblés comme le donne la table 89 du RM0440, PINC, MINC, le mode circulaire, HTIF, TCIF, TEIF et GIF avec leurs interruptions, les bits verrouillés tant qu'EN est à 1, une erreur de bus remettant EN à 0 jusqu'à ce que TEIF soit effacé ; les seize canaux du DMAMUX prenant n'importe laquelle des 115 lignes de requête (DMAREQ_ID), la synchronisation sur une ligne EXTI ou l'événement d'un canal (SE, SPOL, SYNC_ID, NBREQ, SOF), la génération d'événements (EGE), les quatre générateurs de requêtes (SIG_ID, GPOL, GNBREQ, OF) et DMAMUX_OVR ; SPI1 à SPI4 (spi.c, le SPI à FIFO) : maître et esclave dans les quatre modes, trames de 4 à 16 bits (DS, 8 bits imposés pour les valeurs inutilisées), les FIFO d'émission et de réception de 32 bits (TXE à la moitié, RXNE au seuil de FRXTH, FTLVL, FRLVL, OVR quand elle est pleine), les accès de 8 et 16 bits (empaquetés) à DR, LDMA_TX et LDMA_RX pour un nombre impair de transferts DMA, le CRC8 ou CRC16 (CRCL, deux trames après des données de 8 bits), le mode TI, l'impulsion de NSSP, le simplex et le half duplex, MODF, les requêtes DMA ; l'IDCODE du DBGMCU (0x469) et ses registres de gel.", "omissions": [ - "les périphériques que coverage.md indique manquants gardent leurs valeurs de registre et lèvent mcu.unsupported_access : les ADC, DAC, comparateurs, amplis op et VREFBUF, les I2C et SPI, RTC et TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, les FDCAN, l'USB, l'UCPD, le HRTIM, le QUADSPI, le SAI et le FMC", + "les périphériques que coverage.md indique manquants gardent leurs valeurs de registre et lèvent mcu.unsupported_access : les ADC, DAC, comparateurs, amplis op et VREFBUF, les I2C, RTC et TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, les FDCAN, l'USB, l'UCPD, le HRTIM, le QUADSPI, le SAI et le FMC", "les ajouts G4 des timers : le quatrième bit d'OCxM (one-pulse redéclenchable, PWM combinée et asymétrique), le quatrième bit de SMS (reset et déclenchement combinés, les modes codeur étendus), les entrées de déclenchement internes ITR4 à ITR10 et le cinquième bit de TS, le quatrième bit de MMS, les canaux 5 et 6, le dithering (DITHEN : ARR et CCRx lus comme leurs 16 bits entiers), UIFREMAP, l'index du codeur (ECR), les temps morts asymétriques (DTR2), le break 2, les comparateurs sur TISEL et les sources de break d'AF1/AF2, la table d'interconnexion ITR du G4 (celle du F4 est utilisée)", "les temps de démarrage, les temps de la flash et les seuils du PVD sont les valeurs typiques du DS12288 Rev 6 (HSI16 0,8 µs, un quartz HSE 2 ms, LSI 80 µs, LSE 2 s, HSI48 2,5 µs, le verrouillage de la PLL 15 µs ; un double mot 81,7 µs, une rangée rapide 1,91 ms, l'effacement d'une page 22,02 ms, celui d'un banc 22,13 ms ; les seuils du PVD), pas leur dispersion d'une puce à l'autre ni leur dépendance à la température", "RCC : les systèmes de sécurité d'horloge (CSSON, LSECSSON : les oscillateurs ne tombent jamais en panne), LSEDRV, l'effet de HSITRIM et HSI48CAL sur les fréquences, l'ajustement par le CRS, un périphérique maintenu en reset tant que son bit *RSTR reste à 1, le reset de brownout (BORRSTF seulement à la mise sous tension), les activations du mode sommeil (*SMENR), MCO et LSCO sur leurs broches", @@ -2262,6 +2266,7 @@ "USART : la détection de bruit (NE jamais à 1, ONEBIT sans effet), la détection automatique du débit, TXINV et RXINV, les temps d'assertion et de désassertion de DE (DEAT, DEDT), l'esclave synchrone, les modes carte à puce et IrDA, TCBGT", "SYSCFG : la protection en écriture des pages de la CCM SRAM par SWPR, le temps de son effacement, les erreurs de parité que signale CFGR2 ; EXTI : les sources des lignes internes sauf celle du PVD ; GPIO : EVENTOUT, la cellule de compensation, les écrêtages des broches tolérantes au 5 V", "les seuils des E/S sont les caractéristiques typiques du DS12288 (0,39 x VDD - 0,06 et 0,49 x VDD + 0,26, 200 mV d'hystérésis, tirages de 40 kOhm), pas les 0,3 et 0,7 x VDD garantis ; les résistances de sortie et les vitesses de front sont celles du F446", + "SPI : l'I2S (I2SCFGR garde sa valeur), l'arbitrage multimaître qu'un MODF sert au-delà de la faute", "DMA : les délais de l'arbitrage et le minutage de la matrice de bus (une requête est servie aussitôt, un élément de mémoire à mémoire toutes les deux périodes), le filtre de deux périodes des entrées du DMAMUX et les trois périodes pendant lesquelles une écriture de CxCR ou de RGxCR les masque, les octets et demi-mots dupliqués sur les voies pour un périphérique APB qui ignore la taille, LPTIM1_OUT comme entrée de déclenchement et de synchronisation (le LPTIM1 n'est pas modélisé)", "le REV_ID 0x2001 du DBGMCU (révision Z : la révision que porte une carte varie, UM2505 10.1) ; un cœur arrêté consomme son courant de sommeil" ] diff --git a/core/mcu/stm32/dma_f4.c b/core/mcu/stm32/dma_f4.c index fddfe0e05..32cb6cf36 100644 --- a/core/mcu/stm32/dma_f4.c +++ b/core/mcu/stm32/dma_f4.c @@ -278,6 +278,7 @@ void esk_stm32_dma_items_left(struct esk_mach *s, const char *sig, u32 left) esk_stm32_dac_dma_end(s, sig); } esk_stm32_i2c_dma_left(s, sig, left); + esk_stm32_spi_dma_left(s, sig, left); } /* a request served by stream s: a peripheral burst of items; the last two diff --git a/core/mcu/stm32/gpio_f4.c b/core/mcu/stm32/gpio_f4.c index abaabc5c7..68c9857ef 100644 --- a/core/mcu/stm32/gpio_f4.c +++ b/core/mcu/stm32/gpio_f4.c @@ -61,6 +61,7 @@ struct f4gpio { int port; /* 0 for A */ esk_mach_pin out[16]; /* what each pin was told to be */ int af_in[16]; /* the level last given to a pin's AF inputs, -1 none */ + u32 af_num[16]; /* the alternate function that level went to */ int known; int lck_step; /* the lock sequence's writes so far (3: a read locks) */ u32 lck_bits; @@ -158,8 +159,12 @@ static void update_once(struct f4gpio *g) else lvl = o.pull == 1; idr |= (u32)lvl << i; - if (mode == 2 && lvl != g->af_in[i]) { + if (mode == 2 && (lvl != g->af_in[i] || af_of(g, i) != g->af_num[i])) { + /* a level changed, or another function took the pin: it hears + * the pin's level at once (SPI1_SCK on PB3, after its reset's + * AF0) */ g->af_in[i] = lvl; + g->af_num[i] = af_of(g, i); af_input(g, i, af_of(g, i), lvl); } else if (mode != 2) { g->af_in[i] = -1; diff --git a/core/mcu/stm32/spi.c b/core/mcu/stm32/spi.c index 493863ae3..83f5b265d 100644 --- a/core/mcu/stm32/spi.c +++ b/core/mcu/stm32/spi.c @@ -79,6 +79,7 @@ #define CR1_SSM (1u << 9) #define CR1_RXONLY (1u << 10) #define CR1_DFF (1u << 11) +#define CR1_CRCL (1u << 11) /* the FIFO SPI's: the CRC's length */ #define CR1_CRCNEXT (1u << 12) #define CR1_CRCEN (1u << 13) #define CR1_BIDIOE (1u << 14) @@ -86,10 +87,14 @@ #define CR2_RXDMAEN (1u << 0) #define CR2_TXDMAEN (1u << 1) #define CR2_SSOE (1u << 2) +#define CR2_NSSP (1u << 3) #define CR2_FRF (1u << 4) #define CR2_ERRIE (1u << 5) #define CR2_RXNEIE (1u << 6) #define CR2_TXEIE (1u << 7) +#define CR2_FRXTH (1u << 12) +#define CR2_LDMA_RX (1u << 13) +#define CR2_LDMA_TX (1u << 14) #define SR_RXNE (1u << 0) #define SR_TXE (1u << 1) #define SR_CRCERR (1u << 4) @@ -97,6 +102,8 @@ #define SR_OVR (1u << 6) #define SR_BSY (1u << 7) #define SR_FRE (1u << 8) +#define SR_FRLVL (3u << 9) +#define SR_FTLVL (3u << 11) enum { P_NSS, P_SCK, P_MISO, P_MOSI }; static const char *const fn_names[4] = { "NSS", "SCK", "MISO", "MOSI" }; @@ -125,6 +132,15 @@ struct spi { int armed; /* a TI slave saw the pulse: a frame starts */ int in_sck, in_nss; /* the levels last seen on the pins, -1 none yet */ int ovr_dr, modf_sr; /* the clearing sequences' first steps */ + /* the FIFO SPI (RM0440 42, an SR with FRLVL): 32-bit transmit and + * receive FIFOs of frames, each one byte (DS <= 8) or two */ + int fifo; + u16 txq[4], rxq[4]; + int txn, rxn; + int gap; /* NSSP: half bits of NSS high left before the next frame */ + int crc_part; /* a 16-bit CRC after 8-bit frames: its second frame is next */ + u32 crc_word, crc_in; /* the CRC going out, and coming in, in two frames */ + int ldma_tx, ldma_rx; /* LDMA: the DMA's last access carries one frame */ }; static u32 reg(const struct esk_rf_reg *r) { return r ? (u32)r->value : 0; } @@ -136,6 +152,7 @@ static int active(const struct spi *k) { return enabled(k) || k->busy; } static int ti(const struct spi *k) { return k->has_ti && (reg(k->cr2) & CR2_FRF); } static int cpol(const struct spi *k) { return ti(k) ? 0 : (reg(k->cr1) & CR1_CPOL) != 0; } static int cpha(const struct spi *k) { return ti(k) ? 1 : (reg(k->cr1) & CR1_CPHA) != 0; } +static int nssp(const struct spi *k); /* the data go out, and come in */ static int sending(const struct spi *k) @@ -220,7 +237,7 @@ static int drive(const struct spi *k, int fn) if (fn == P_MOSI) return sending(k) ? k->mosi : -1; if (fn == P_NSS) { - if (ti(k)) + if (ti(k) || nssp(k)) return k->nss_out; return (c2 & CR2_SSOE) && !(c1 & CR1_SSM) ? 0 : -1; } @@ -254,9 +271,12 @@ static void pins(struct spi *k) /* the DMA requests and the interrupt as the flags are now: a request the * DMA serves at once changes them (it writes DR, it reads it) */ +static void levels(struct spi *k); + static void update(struct spi *k) { u32 sr, c2 = reg(k->cr2); + levels(k); esk_stm32_dma_request(k->s, k->sig_tx, enabled(k) && (c2 & CR2_TXDMAEN) && (reg(k->sr) & SR_TXE)); esk_stm32_dma_request(k->s, k->sig_rx, enabled(k) && (c2 & CR2_RXDMAEN) && (reg(k->sr) & SR_RXNE)); sr = reg(k->sr); @@ -272,14 +292,71 @@ static void sr_set(struct spi *k, u32 set, u32 clear) /* ---- CRC -------------------------------------------------------------------------- */ -static int width(const struct spi *k) { return (reg(k->cr1) & CR1_DFF) ? 16 : 8; } +static int width(const struct spi *k) +{ + if (k->fifo) { + u32 ds = reg(k->cr2) >> 8 & 15u; + return ds < 3 ? 8 : (int)ds + 1; /* DS: 4 to 16 bits */ + } + return (reg(k->cr1) & CR1_DFF) ? 16 : 8; +} + +/* the CRC's length: the FIFO SPI's CRCL, else the frame's */ +static int crc_len(const struct spi *k) { return k->fifo ? ((reg(k->cr1) & CR1_CRCL) ? 16 : 8) : width(k); } + +/* ---- the FIFOs (RM0440 42.5.9) ------------------------------------------------------ */ + +/* a frame takes one byte of a 32-bit FIFO (DS <= 8) or two */ +static int frame_bytes(const struct spi *k) { return width(k) > 8 ? 2 : 1; } +static u32 frame_mask(const struct spi *k) { return (1u << width(k)) - 1u; } + +/* TXE while the transmit FIFO is at most half full; RXNE once the receive + * FIFO holds FRXTH's quarter (8 bits) or half (16 bits), a quarter for the + * DMA's last access with LDMA_RX; FTLVL and FRLVL their levels (3/4 and + * full both read full) */ +static void levels(struct spi *k) +{ + int tb, rb, thr; + u32 sr; + if (!k->fifo) + return; + tb = k->txn * frame_bytes(k); + rb = k->rxn * frame_bytes(k); + thr = (reg(k->cr2) & CR2_FRXTH) || k->ldma_rx ? 1 : 2; + sr = reg(k->sr) & ~(SR_FRLVL | SR_FTLVL | SR_TXE | SR_RXNE); + if (tb <= 2) + sr |= SR_TXE; + if (rb >= thr) + sr |= SR_RXNE; + sr |= (u32)(rb > 3 ? 3 : rb) << 9 | (u32)(tb > 3 ? 3 : tb) << 11; + esk_rf_hw(k->sr, sr); +} + +static void tx_push(struct spi *k, u32 v) +{ + if ((k->txn + 1) * frame_bytes(k) <= 4) + k->txq[k->txn++] = (u16)(v & frame_mask(k)); +} + +static u32 rx_pop(struct spi *k) +{ + u32 v; + if (!k->rxn) + return 0; + v = k->rxq[0]; + memmove(k->rxq, k->rxq + 1, (size_t)(--k->rxn) * sizeof k->rxq[0]); + return v; +} + +/* a frame waits to go out */ +static int tx_ready(const struct spi *k) { return k->fifo ? k->txn > 0 : k->tx_full; } /* the frame's bit i (0 first on the line) of a `bits`-bit word */ static int line_pos(const struct spi *k, int i) { return (reg(k->cr1) & CR1_LSBFIRST) ? i : k->bits - 1 - i; } static u32 crc_step(const struct spi *k, u32 crc, u32 word) { - int w = width(k), i; + int w = crc_len(k), i; u32 mask = w == 16 ? 0xffffu : 0xffu, poly = reg(k->crcpr) & mask; for (i = 0; i < k->bits; i++) { u32 b = word >> line_pos(k, i) & 1u, fb = (crc >> (w - 1) & 1u) ^ b; @@ -292,7 +369,16 @@ static u32 crc_step(const struct spi *k, u32 crc, u32 word) static int crc_due(const struct spi *k) { - return (reg(k->cr1) & CR1_CRCEN) && ((reg(k->cr1) & CR1_CRCNEXT) || k->crc_tx_end || k->crc_rx_end); + return k->crc_part || + ((reg(k->cr1) & CR1_CRCEN) && ((reg(k->cr1) & CR1_CRCNEXT) || k->crc_tx_end || k->crc_rx_end)); +} + +/* a 16-bit CRC after 8-bit frames goes out as two frames, its first byte + * on the line first */ +static u32 crc_piece(const struct spi *k, int second) +{ + int lsb = (reg(k->cr1) & CR1_LSBFIRST) != 0; + return (second ? !lsb : lsb) ? (k->crc_word & 0xffu) : (k->crc_word >> 8 & 0xffu); } /* ---- frames ------------------------------------------------------------------------ */ @@ -305,13 +391,30 @@ static void load(struct spi *k) k->crc_frame = 0; k->bits = width(k); k->fresh = 1; - if (k->tx_full && sending(k)) { - k->out = k->tx_buf; - k->tx_full = 0; - sr_set(k, SR_TXE, 0); + if (k->crc_part) { + k->out = crc_piece(k, 1); + k->crc_part = 0; + k->crc_frame = 2; + } else if (tx_ready(k) && sending(k)) { + if (k->fifo) { + k->out = k->txq[0]; + memmove(k->txq, k->txq + 1, (size_t)(--k->txn) * sizeof k->txq[0]); + levels(k); + } else { + k->out = k->tx_buf; + k->tx_full = 0; + sr_set(k, SR_TXE, 0); + } } else if (crc_due(k)) { - k->out = reg(k->txcrcr); - k->crc_frame = 1; + k->crc_word = reg(k->txcrcr); + if (crc_len(k) > k->bits) { + k->out = crc_piece(k, 0); /* the second follows */ + k->crc_part = 1; + k->crc_frame = 1; + } else { + k->out = k->crc_word; + k->crc_frame = 2; + } k->crc_tx_end = k->crc_rx_end = 0; esk_rf_hw(k->cr1, k->cr1->value & ~(u64)CR1_CRCNEXT); } else { @@ -333,9 +436,14 @@ static void in_bit(struct spi *k, int i, int v) /* the received frame to DR, the CRCs */ static void received(struct spi *k) { - u32 mask = k->bits == 16 ? 0xffffu : 0xffu; - if (k->crc_frame) { - if (receiving(k) && (k->in & mask) != (reg(k->rxcrcr) & mask)) + u32 mask = crc_len(k) == 16 ? 0xffffu : 0xffu; + if (k->crc_frame == 1) { + k->crc_in = k->in & 0xffu; /* the CRC's first frame */ + } else if (k->crc_frame) { + u32 got = k->in; + if (crc_len(k) > k->bits) + got = (reg(k->cr1) & CR1_LSBFIRST) ? (k->in & 0xffu) << 8 | k->crc_in : k->crc_in << 8 | (k->in & 0xffu); + if (receiving(k) && (got & mask) != (reg(k->rxcrcr) & mask)) sr_set(k, SR_CRCERR, 0); } else if (reg(k->cr1) & CR1_CRCEN) { if (sending(k)) @@ -346,6 +454,15 @@ static void received(struct spi *k) k->crc_frame = 0; if (!receiving(k)) return; + if (k->fifo) { + /* a full receive FIFO: OVR, the frame lost */ + if ((k->rxn + 1) * frame_bytes(k) > 4) + sr_set(k, SR_OVR, 0); + else + k->rxq[k->rxn++] = (u16)(k->in & frame_mask(k)); + levels(k); + return; + } if (k->sr->value & SR_RXNE) { sr_set(k, SR_OVR, 0); } else { @@ -376,11 +493,21 @@ static void wait(struct spi *k) /* a frame follows the one under way */ static int next_waiting(const struct spi *k) { - return enabled(k) && master(k) && ((k->tx_full && sending(k)) || crc_due(k) || receive_only(k)); + return enabled(k) && master(k) && ((tx_ready(k) && sending(k)) || crc_due(k) || receive_only(k)); +} + +/* NSS pulse mode: a Motorola master with CPHA 0 driving NSS (RM0440 42.5.12) */ +static int nssp(const struct spi *k) +{ + u32 c1 = reg(k->cr1), c2 = reg(k->cr2); + return k->fifo && master(k) && (c2 & CR2_NSSP) && (c2 & CR2_SSOE) && !(c1 & CR1_SSM) && !ti(k) && + !(c1 & CR1_CPHA); } static void start(struct spi *k) { + if (nssp(k)) + k->nss_out = 0; load(k); k->leading = 1; k->busy = 1; @@ -407,9 +534,19 @@ static void frame_end(struct spi *k) received(k); update(k); /* a DMA reading the last item says the CRC is next */ if (next_waiting(k)) { + if (nssp(k)) { + /* NSS high for one clock between the frames, SCK idle */ + k->nss_out = 1; + k->gap = 2; + pins(k); + wait(k); + return; + } start(k); return; } + if (nssp(k)) + k->nss_out = 1; /* and high after the last one */ stop(k); pins(k); update(k); @@ -418,6 +555,14 @@ static void frame_end(struct spi *k) static void edge(struct spi *k) { int ph = cpha(k), pol = cpol(k); + if (k->gap) { + if (--k->gap) { + wait(k); + return; + } + start(k); + return; + } if (k->leading) { k->sck = !pol; if (k->bit < 0) { @@ -478,6 +623,8 @@ static void mode_fault(struct spi *k) esk_rf_hw(k->cr1, k->cr1->value & ~(u64)(CR1_SPE | CR1_MSTR)); k->busy = 0; k->tx_full = 0; + k->txn = 0; + k->gap = k->crc_part = 0; sr_set(k, SR_TXE, SR_BSY); esk_rf_clock(k->p, &k->running, 0); pins(k); @@ -597,6 +744,19 @@ static u32 spi_read(void *ctx, u32 off, int n) { struct spi *k = (struct spi *)ctx; u32 v = esk_rf_read(k->p, off, n); + if (k->fifo && off == esk_rf_off(k->dr)) { + /* the oldest frame, or two packed in a 16-bit access (DS <= 8) */ + if (k->s->bus.debug) + return k->rxn ? k->rxq[0] : 0; + k->ovr_dr = (k->sr->value & SR_OVR) != 0; + v = rx_pop(k); + if (n >= 2 && frame_bytes(k) == 1 && !k->ldma_rx) + v |= rx_pop(k) << 8; + k->ldma_rx = 0; + esk_rf_hw(k->dr, v); + update(k); + return v; + } if (k->s->bus.debug) return v; if (off == esk_rf_off(k->dr)) { @@ -618,9 +778,19 @@ static void spi_write(void *ctx, u32 off, int n, u32 v) { struct spi *k = (struct spi *)ctx; if (off == esk_rf_off(k->dr)) { - k->tx_buf = v & ((reg(k->cr1) & CR1_DFF) ? 0xffffu : 0xffu); - k->tx_full = 1; - sr_set(k, 0, SR_TXE); + if (k->fifo) { + /* one frame, or two packed in a 16-bit access (DS <= 8), but + * the DMA's last with LDMA_TX */ + tx_push(k, v); + if (n >= 2 && frame_bytes(k) == 1 && !k->ldma_tx) + tx_push(k, v >> 8); + k->ldma_tx = 0; + levels(k); + } else { + k->tx_buf = v & ((reg(k->cr1) & CR1_DFF) ? 0xffffu : 0xffu); + k->tx_full = 1; + sr_set(k, 0, SR_TXE); + } if (enabled(k) && master(k) && !k->busy) start(k); else if (enabled(k) && !master(k) && !k->busy && !k->fresh) @@ -675,6 +845,8 @@ static void spi_write(void *ctx, u32 off, int n, u32 v) } esk_rf_write(k->p, off, n, v); if (off == esk_rf_off(k->cr2)) { + if (k->fifo && (reg(k->cr2) >> 8 & 15u) < 3) + esk_rf_hw(k->cr2, (k->cr2->value & ~(u64)0xF00u) | 0x700u); /* not used: 8 bits */ if (enabled(k) && master(k) && !k->busy) k->sck = cpol(k); mode_fault(k); @@ -696,7 +868,11 @@ static void spi_reset(void *ctx) k->nss_out = k->synced = k->armed = 0; k->ovr_dr = k->modf_sr = 0; k->left = 0; + k->txn = k->rxn = k->gap = k->crc_part = 0; + k->ldma_tx = k->ldma_rx = 0; + k->crc_word = k->crc_in = 0; esk_rf_hw(k->sr, k->sr->value | SR_TXE); + levels(k); } const struct esk_dev_ops esk_stm32_spi_ops = { @@ -762,6 +938,29 @@ void esk_stm32_spi_signal_input(struct esk_mach *s, const char *sig, int level) } } +/* the DMA's items left for an SPI's request: with one left, LDMA_TX and + * LDMA_RX make its last access carry one frame */ +void esk_stm32_spi_dma_left(struct esk_mach *s, const char *sig, u32 left) +{ + char name[8]; + const char *us = strchr(sig, '_'); + size_t l = us ? (size_t)(us - sig) : 0; + struct spi *k; + if (left != 1 || !us || l >= sizeof name || strncmp(sig, "SPI", 3)) + return; + memcpy(name, sig, l); + name[l] = 0; + k = spi_named(s, name); + if (!k || !k->fifo || frame_bytes(k) != 1) + return; + if (!strcmp(us + 1, "TX") && (reg(k->cr2) & CR2_LDMA_TX)) + k->ldma_tx = 1; + else if (!strcmp(us + 1, "RX") && (reg(k->cr2) & CR2_LDMA_RX)) { + k->ldma_rx = 1; + update(k); + } +} + void esk_stm32_spi_dma_end(struct esk_mach *s, const char *sig) { char name[8]; @@ -841,6 +1040,7 @@ void *esk_stm32_spi_create(struct esk_mach *s, struct esk_rf_periph *p) k.apb = p->gate_name && strstr(p->gate_name, "APB2") ? 2 : 1; k.irq = esk_rf_irq(p, "SPI"); k.has_ti = esk_rf_mask(k.cr2, "FRF") != 0; + k.fifo = esk_rf_mask(k.sr, "FRLVL") != 0; k.in_sck = k.in_nss = -1; esk_rf_set_reset(k.sr, k.sr->reset | SR_TXE); snprintf(k.sig_tx, sizeof k.sig_tx, "%s_TX", p->name); diff --git a/core/mcu/stm32/stm32.h b/core/mcu/stm32/stm32.h index c215f08f5..935da0391 100644 --- a/core/mcu/stm32/stm32.h +++ b/core/mcu/stm32/stm32.h @@ -196,6 +196,7 @@ int esk_stm32_usart_pin(struct esk_mach *m, const char *unit, int tx, int *port, int esk_stm32_spi_signal(struct esk_mach *m, const char *sig); void esk_stm32_spi_signal_input(struct esk_mach *m, const char *sig, int level); void esk_stm32_spi_dma_end(struct esk_mach *m, const char *sig); +void esk_stm32_spi_dma_left(struct esk_mach *m, const char *sig, u32 left); /* an I2C's alternate-function signal (I2C1_SCL, _SDA, _SMBA): the level it * drives (1 let go), or -1; a level its pin gives it; a DMA stream's items * left after one for its request (I2C1_RX's EOT-1, I2C1_TX's end) */ diff --git a/docs/STATUS.md b/docs/STATUS.md index d2fe7d818..c235f130e 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -15,9 +15,9 @@ alternate functions from ST's open pin data. The G4's own IP has new models: the RCC (`stm32g4-rcc`), PWR (`stm32g4-pwr`), flash interface (`stm32g4-flash`), the U(S)ARTs and LPUART (`stm32-usart-v2`), and DMA1, DMA2 and DMAMUX (`stm32g4-dma`, `stm32g4-dmamux`); GPIO, SYSCFG, EXTI, the -timers, CRC, the watchdogs and DBGMCU are the F4's models taught the G4's -registers. 37 of the 82 peripheral blocks are modelled -(`docs/coverage.md`); the ADCs, DACs, comparators, op-amps, I2C, SPI, RTC, the FDCANs, USB, HRTIM, the math accelerators and the rest +timers, CRC, the watchdogs, DBGMCU and the SPIs (the FIFO SPI) are the F4's +models taught the G4's registers. 41 of the 82 peripheral blocks are +modelled (`docs/coverage.md`); the ADCs, DACs, comparators, op-amps, I2C, RTC, the FDCANs, USB, HRTIM, the math accelerators and the rest keep their registers until their models land. Evidence: @@ -33,7 +33,7 @@ Evidence: handler; - the board's seven fixtures (USB, VIN, E5V, VIN without JP5, the IDD ammeter, B1, LD2 through Q1); -- 24 of STM32CubeG4's NUCLEO-G474RE examples built unmodified +- 26 of STM32CubeG4's NUCLEO-G474RE examples built unmodified (`tests/vendor/stm32cubeg4/run.py`, also in CI): GPIO_IOToggle, GPIO_EXTI, HAL_TimeBase_TIM, RCC_ClockConfig (the PLL moved between HSI16 and the crystal on B1), UART_Printf, the four CRC examples, @@ -45,7 +45,14 @@ Evidence: on TIM1's four channels), TIM_OCToggle, DMA_FLASHToRAM and LL's DMA_CopyFromFlashToMemory_Init (memory to memory), UART_HyperTerminal_DMA (USART2 on PA2/PA3, both directions by DMA) and - UART_ReceptionToIdle_CircularDMA (LPUART1's receiver by circular DMA); + UART_ReceptionToIdle_CircularDMA (LPUART1's receiver by circular DMA), + SPI_FullDuplex_ComPolling and SPI_FullDuplex_ComDMA on two boards (each + board's _Master or _Slave project, SPI1 on PB3 to PB5); SPI_FullDuplex_ComIT + is not among them yet: the master's fourth received byte loses a bit, + the slave's MISO change, made in its TXE interrupt, reaching the line + after the master's next sample; +- `test_stm32g4`'s SPI test: DS, the FIFOs' levels and thresholds, packed + reads, OVR, NSSP; - `test_stm32g4`'s DMA test: memory to memory, table 89's packing, the bits locked while EN is set, LPUART1's transmitter through DMAMUX, synchronisation on EXTI13 with NBREQ and its overrun, a channel's event @@ -57,6 +64,12 @@ console follows its bridge's pins, as the wiring does. An EXTI line given another port by SYSCFG now sees the new pin's level at once, an edge if it differs, as the line's edge detector follows the multiplexer. +In the functional policy a resistor is still a wire: on the NUCLEO-G474RE +R29 and R28 join PA5 to GND, and R27 and R26 PC13, so LD2 and B1 work in +the electrical policy only (the board's fidelity says so). Two boards on +SPI under the electrical policy run about 230 times slower than real time +(their supply islands stepping with the bus's edges). + Found on the way: exception entry did not clear CONTROL.SPSEL (every Cortex-M part), and IWDG_Reset's "invalid address" 0x00040001 lies inside the G474's 512 KiB flash alias: the store sets PGSERR without a fault, so diff --git a/docs/coverage.md b/docs/coverage.md index 80a656595..c4f8d424b 100644 --- a/docs/coverage.md +++ b/docs/coverage.md @@ -19,7 +19,7 @@ evidence for each model is in [STATUS.md](STATUS.md). | STM32F103C8 | 26 | 0 | 1 | 27 | | STM32F446RE | 53 | 0 | 15 | 68 | | STM32F446ZE | 53 | 0 | 15 | 68 | -| STM32G474RE | 37 | 0 | 45 | 82 | +| STM32G474RE | 41 | 0 | 41 | 82 | ## ESP32 (`espressif/esp32`) @@ -582,7 +582,7 @@ Declared omissions: DBGMCU's freeze bits for the RTC, the I2C SMBus time-outs an ## STM32G474RE (`st/stm32g474re`) Boards: NUCLEO-G474RE. -37 of 82 peripherals modelled, 0 registers only, 45 missing. +41 of 82 peripherals modelled, 0 registers only, 41 missing. | Peripheral | Model | State | |---|---|---| @@ -597,8 +597,8 @@ Boards: NUCLEO-G474RE. | RTC | — | **missing** | | WWDG | `stm32-wwdg` | modelled | | IWDG | `stm32-iwdg` | modelled | -| SPI2 | — | **missing** | -| SPI3 | — | **missing** | +| SPI2 | `stm32-spi` | modelled | +| SPI3 | `stm32-spi` | modelled | | USART2 | `stm32-usart-v2` | modelled | | USART3 | `stm32-usart-v2` | modelled | | UART4 | `stm32-usart-v2` | modelled | @@ -621,10 +621,10 @@ Boards: NUCLEO-G474RE. | OPAMP | — | **missing** | | EXTI | `stm32-exti` | modelled | | TIM1 | `stm32-tim` | modelled | -| SPI1 | — | **missing** | +| SPI1 | `stm32-spi` | modelled | | TIM8 | `stm32-tim` | modelled | | USART1 | `stm32-usart-v2` | modelled | -| SPI4 | — | **missing** | +| SPI4 | `stm32-spi` | modelled | | TIM15 | `stm32-tim` | modelled | | TIM16 | `stm32-tim` | modelled | | TIM17 | `stm32-tim` | modelled | @@ -669,4 +669,4 @@ Boards: NUCLEO-G474RE. | QUADSPI | — | **missing** | | DBGMCU | `stm32f4-dbgmcu` | modelled | -Declared omissions: the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, the I2Cs and SPIs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC; the timers' G4 additions: OCxM's fourth bit (retriggerable one-pulse, combined and asymmetric PWM), SMS's fourth bit (combined reset and trigger, the extended encoder modes), the internal trigger inputs ITR4 to ITR10 and TS's fifth bit, MMS's fourth bit, channels 5 and 6, dithering (DITHEN: ARR and CCRx read as their 16 integer bits), UIFREMAP, the encoder index (ECR), the asymmetric dead times (DTR2), break 2, the comparators on TISEL and AF1/AF2's break sources, the G4's ITR interconnection table (the F4's is used); the start-up times, flash times and PVD thresholds are DS12288 Rev 6's typical values (HSI16 0.8 us, an HSE crystal 2 ms, LSI 80 us, LSE 2 s, HSI48 2.5 us, the PLL's lock 15 us; a double word 81.7 us, a fast row 1.91 ms, a page erase 22.02 ms, a bank erase 22.13 ms; the PVD's thresholds), not their spread between parts or their dependence on temperature; RCC: the clock security systems (CSSON, LSECSSON: the oscillators never fail), LSEDRV, HSITRIM and HSI48CAL's effect on the frequencies, the CRS's trimming, a peripheral held in reset while its *RSTR bit stays set, the brownout reset (BORRSTF only at power-on), the sleep-mode enables (*SMENR), MCO and LSCO on their pins; PWR: the regulator's settling (VOSF never set) and the wake-up times, the supply currents, the PVMs (VDDA is VDD), UCPD's dead-battery bits, VBAT charging; FLASH: the option bytes' programming time, the read protection's levels and their mass erase, PCROP and the securable area, ECC, the bank swap (BFB2, FB_MODE), the boot from SRAM, the power-down modes, the caches' real line length; USART: noise detection (NE never sets, ONEBIT does nothing), auto baud rate detection, TXINV and RXINV, DE's assertion and deassertion times (DEAT, DEDT), the synchronous slave, smartcard and IrDA modes, TCBGT; SYSCFG: SWPR's write protection of the CCM SRAM, its erase time, the parity errors CFGR2 reports; EXTI: the internal lines' sources but PVD's; GPIO: EVENTOUT, the I/O compensation, the 5 V tolerant pins' clamps; the I/O thresholds are DS12288's typical characteristics (0.39 x VDD - 0.06 and 0.49 x VDD + 0.26, 200 mV of hysteresis, 40 kOhm pulls), not the guaranteed 0.3 and 0.7 x VDD; the output resistances and edge rates are the F446's; DMA: the arbitration's delays and the bus matrix's timing (a request is served at once, a memory-to-memory item every two cycles), the DMAMUX inputs' two-cycle filter and the three cycles a CxCR or RGxCR write masks them for, the byte and half-word lanes duplicated for an APB peripheral that ignores the size, LPTIM1_OUT as a trigger and synchronisation input (LPTIM1 is not modelled); DBGMCU's REV_ID 0x2001 (revision Z: which revision a board carries varies, UM2505 10.1); a halted core draws its sleep current. +Declared omissions: the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, the I2Cs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC; the timers' G4 additions: OCxM's fourth bit (retriggerable one-pulse, combined and asymmetric PWM), SMS's fourth bit (combined reset and trigger, the extended encoder modes), the internal trigger inputs ITR4 to ITR10 and TS's fifth bit, MMS's fourth bit, channels 5 and 6, dithering (DITHEN: ARR and CCRx read as their 16 integer bits), UIFREMAP, the encoder index (ECR), the asymmetric dead times (DTR2), break 2, the comparators on TISEL and AF1/AF2's break sources, the G4's ITR interconnection table (the F4's is used); the start-up times, flash times and PVD thresholds are DS12288 Rev 6's typical values (HSI16 0.8 us, an HSE crystal 2 ms, LSI 80 us, LSE 2 s, HSI48 2.5 us, the PLL's lock 15 us; a double word 81.7 us, a fast row 1.91 ms, a page erase 22.02 ms, a bank erase 22.13 ms; the PVD's thresholds), not their spread between parts or their dependence on temperature; RCC: the clock security systems (CSSON, LSECSSON: the oscillators never fail), LSEDRV, HSITRIM and HSI48CAL's effect on the frequencies, the CRS's trimming, a peripheral held in reset while its *RSTR bit stays set, the brownout reset (BORRSTF only at power-on), the sleep-mode enables (*SMENR), MCO and LSCO on their pins; PWR: the regulator's settling (VOSF never set) and the wake-up times, the supply currents, the PVMs (VDDA is VDD), UCPD's dead-battery bits, VBAT charging; FLASH: the option bytes' programming time, the read protection's levels and their mass erase, PCROP and the securable area, ECC, the bank swap (BFB2, FB_MODE), the boot from SRAM, the power-down modes, the caches' real line length; USART: noise detection (NE never sets, ONEBIT does nothing), auto baud rate detection, TXINV and RXINV, DE's assertion and deassertion times (DEAT, DEDT), the synchronous slave, smartcard and IrDA modes, TCBGT; SYSCFG: SWPR's write protection of the CCM SRAM, its erase time, the parity errors CFGR2 reports; EXTI: the internal lines' sources but PVD's; GPIO: EVENTOUT, the I/O compensation, the 5 V tolerant pins' clamps; the I/O thresholds are DS12288's typical characteristics (0.39 x VDD - 0.06 and 0.49 x VDD + 0.26, 200 mV of hysteresis, 40 kOhm pulls), not the guaranteed 0.3 and 0.7 x VDD; the output resistances and edge rates are the F446's; SPI: I2S (I2SCFGR keeps its value), the multimaster arbitration a MODF serves beyond the fault; DMA: the arbitration's delays and the bus matrix's timing (a request is served at once, a memory-to-memory item every two cycles), the DMAMUX inputs' two-cycle filter and the three cycles a CxCR or RGxCR write masks them for, the byte and half-word lanes duplicated for an APB peripheral that ignores the size, LPTIM1_OUT as a trigger and synchronisation input (LPTIM1 is not modelled); DBGMCU's REV_ID 0x2001 (revision Z: which revision a board carries varies, UM2505 10.1); a halted core draws its sleep current. diff --git a/tests/unit/test_stm32g4.c b/tests/unit/test_stm32g4.c index c09fba6ce..21fe6b26a 100644 --- a/tests/unit/test_stm32g4.c +++ b/tests/unit/test_stm32g4.c @@ -921,6 +921,93 @@ static void test_dma(void) g4_close(&f); } +/* SPI1, the FIFO SPI (RM0440 42): SCK PB3, MISO PB4, MOSI PB5 (AF5), NSS + * PA4 (AF5) */ +#define SPI1 0x40013000u +#define SPI_CR1 (SPI1 + 0x00u) +#define SPI_CR2 (SPI1 + 0x04u) +#define SPI_SR (SPI1 + 0x08u) +#define SPI_DR (SPI1 + 0x0Cu) +#define GPIOB 0x48000400u + +static u32 rd8(g4 *f, u32 a) +{ + u32 v = 0; + CHECK_EQ(esk_bus_read(&f->m.bus, a, 1, &v), 0); + return v; +} + +static void test_spi_fifo(void) +{ + g4 f; + u32 v; + int k; + if (!g4_open(&f)) + return; + wr(&f, RCC_AHB2ENR, rd(&f, RCC_AHB2ENR) | 1u | 2u); /* GPIOA, GPIOB */ + wr(&f, RCC_APB2ENR, rd(&f, RCC_APB2ENR) | 1u << 12); /* SPI1EN */ + wr(&f, GPIOB + MODER, (rd(&f, GPIOB + MODER) & ~(0x3Fu << 6)) | 0x2Au << 6); + wr(&f, GPIOB + AFRL, (rd(&f, GPIOB + AFRL) & ~(0xFFFu << 12)) | 0x555u << 12); + wr(&f, GPIOA + MODER, (rd(&f, GPIOA + MODER) & ~(3u << 8)) | 2u << 8); + wr(&f, GPIOA + AFRL, (rd(&f, GPIOA + AFRL) & ~(0xFu << 16)) | 5u << 16); + f.ext[1][4] = 1; /* MISO held high: every frame received is ones */ + esk_stm32f4_pins_changed(&f.m); + CHECK_EQ(rd(&f, SPI_CR2), 0x700u); /* DS 8 bits out of reset */ + wr(&f, SPI_CR2, 2u << 8); /* a DS not used: forced to 8 bits */ + CHECK_EQ(rd(&f, SPI_CR2) >> 8 & 15u, 7u); + wr(&f, SPI_CR2, 7u << 8 | 1u << 12); /* 8 bits, FRXTH: RXNE at a byte */ + wr(&f, SPI_CR1, 1u << 2 | 1u << 8 | 1u << 9); /* MSTR, SSI, SSM, PCLK / 2 */ + /* the transmit FIFO before SPE: TXE while it is at most half full */ + wr8(&f, SPI_DR, 0x11u); + CHECK_EQ(rd(&f, SPI_SR) & 0x1802u, 1u << 11 | 2u); /* FTLVL 1/4, TXE */ + wr8(&f, SPI_DR, 0x22u); + CHECK_EQ(rd(&f, SPI_SR) & 0x1802u, 2u << 11 | 2u); /* 1/2, TXE */ + wr8(&f, SPI_DR, 0x33u); + CHECK_EQ(rd(&f, SPI_SR) & 0x1802u, 3u << 11); /* 3/4 reads full, TXE clear */ + wr(&f, SPI_CR1, rd(&f, SPI_CR1) | 1u << 6); /* SPE: three frames go */ + run_us(&f, 20.0); + v = rd(&f, SPI_SR); + CHECK_EQ(v & 0x1880u, 0u); /* FTLVL empty, BSY clear */ + CHECK_EQ(v >> 9 & 3u, 3u); /* FRLVL: three bytes */ + CHECK(v & 1u); /* RXNE */ + CHECK_EQ(rd(&f, SPI_DR) & 0xFFFFu, 0xFFFFu); /* a word read: two frames packed */ + CHECK_EQ(rd(&f, SPI_SR) >> 9 & 3u, 1u); + CHECK_EQ(rd8(&f, SPI_DR), 0xFFu); + CHECK_EQ(rd(&f, SPI_SR) & 0x601u, 0u); /* empty, RXNE clear */ + /* FRXTH 0: RXNE at two bytes only */ + wr(&f, SPI_CR2, 7u << 8); + wr8(&f, SPI_DR, 0x44u); + run_us(&f, 10.0); + CHECK_EQ(rd(&f, SPI_SR) & 0x601u, 1u << 9); /* a byte in, no RXNE */ + wr8(&f, SPI_DR, 0x55u); + run_us(&f, 10.0); + CHECK_EQ(rd(&f, SPI_SR) & 0x601u, 2u << 9 | 1u); + /* five more frames unread: the FIFO full at four bytes, then OVR */ + for (k = 0; k < 3; k++) { + wr8(&f, SPI_DR, 0x66u); + run_us(&f, 10.0); + } + v = rd(&f, SPI_SR); + CHECK_EQ(v >> 9 & 3u, 3u); + CHECK(v & 1u << 6); /* OVR */ + (void)rd(&f, SPI_DR); + (void)rd(&f, SPI_DR); + v = rd(&f, SPI_SR); /* DR then SR: the read shows OVR and clears it */ + CHECK(v & 1u << 6); + v = rd(&f, SPI_SR); + CHECK_EQ(v & (1u << 6), 0u); + /* NSSP: NSS pulses between frames and stays high after the last */ + wr(&f, SPI_CR1, rd(&f, SPI_CR1) & ~(1u << 6)); + wr(&f, SPI_CR1, (rd(&f, SPI_CR1) & ~(1u << 9 | 1u << 8))); /* NSS by the hardware */ + wr(&f, SPI_CR2, 7u << 8 | 1u << 12 | 1u << 3 | 1u << 2); /* NSSP, SSOE */ + wr(&f, SPI_CR1, rd(&f, SPI_CR1) | 1u << 6); + CHECK_EQ(f.pin[0][4].drive, 0); /* enabled: NSS low */ + wr(&f, SPI_DR, 0x7788u); /* two frames back to back */ + run_us(&f, 20.0); + CHECK_EQ(f.pin[0][4].drive, 1); /* high after the transfer */ + g4_close(&f); +} + TEST_MAIN_BEGIN RUN(test_reset); RUN(test_170mhz); @@ -937,4 +1024,5 @@ RUN(test_wwdg_prescaler); RUN(test_stop); RUN(test_spsel_in_handler); RUN(test_dma); +RUN(test_spi_fifo); TEST_MAIN_END diff --git a/tests/vendor/README.md b/tests/vendor/README.md index 1811092b6..306ebbb80 100644 --- a/tests/vendor/README.md +++ b/tests/vendor/README.md @@ -11,7 +11,7 @@ toolchains. | `arduino/` | ArduinoCore-avr (Blink, a tour of the core) | `emblink/arduino_uno` | | `stm32cube/` | ST's STM32F1 HAL and CMSIS device files | `emblink/bluepill` | | `stm32cubef4/` | STM32CubeF4's own examples for the NUCLEO-F446RE (GPIO, HAL time bases, RCC, RTC, timers, UART, PWR's low-power modes, I2C between two boards, EEPROM emulation in flash) and, with `--board nucleo_f446ze`, for the NUCLEO-F446ZE (ADC, CRC, Cortex, DMA, flash erase and program, GPIO, the watchdogs, RTC, seven timer examples, UART, the USB device HID mouse on a computer's port, the USB host HID and MSC demos with Adafruit's 1.8" TFT shield, a mouse and a flash drive; their middleware and components, stm32-mw-usb-device v2.11.4, stm32-mw-usb-host, stm32-mw-fatfs, stm32-st7735 and stm32-bsp-common at the commits CubeF4 pins, fetched like the rest and copied into CubeF4's tree, with its Adafruit_Shield BSP and Utilities' LCD log and fonts) | `emblink/nucleo_f446re`, `emblink/nucleo_f446ze` | -| `stm32cubeg4/` | STM32CubeG4's own examples for the NUCLEO-G474RE (GPIO, EXTI, the HAL's time base, RCC, UART on LPUART1, CRC, Cortex, flash erase, program and fast program, the IWDG and WWDG, Stop 0, TIM1's PWM and output compare, DMA memory to memory and with USART2 and LPUART1), built from a CubeG4 checkout with its HAL, CMSIS device and Nucleo BSP submodules | `emblink/nucleo_g474re` | +| `stm32cubeg4/` | STM32CubeG4's own examples for the NUCLEO-G474RE (GPIO, EXTI, the HAL's time base, RCC, UART on LPUART1, CRC, Cortex, flash erase, program and fast program, the IWDG and WWDG, Stop 0, TIM1's PWM and output compare, DMA memory to memory and with USART2 and LPUART1, SPI1 between two boards), built from a CubeG4 checkout with its HAL, CMSIS device and Nucleo BSP submodules | `emblink/nucleo_g474re` | | `pico-sdk/` | The Raspberry Pi Pico SDK | `emblink/pico` | | `micropython/` | MicroPython v1.24.1's rp2 port (RPI_PICO), built with its own Makefile and copied as firmware.uf2 onto the Pico's BOOTSEL drive; its prompt over its USB serial port: arithmetic, `machine.Pin` lighting the LED, a file in its flash filesystem | `emblink/pico` | | `freedom-metal/` | SiFive's freedom-metal and freedom-e-sdk's examples | `emblink/hifive1_revb` | diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/spi_fullduplex_comdma/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/spi_fullduplex_comdma/scenario.json new file mode 100644 index 000000000..afd528ac7 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/spi_fullduplex_comdma/scenario.json @@ -0,0 +1,58 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "spi_fullduplex_comdma", + "until": "600ms", + "description": "SPI_FullDuplex_ComDMA: SPI1 of B1 (the master) and B2 (the slave) exchange their buffers full duplex by DMA (DMA1 through DMAMUX) once B1's USER button is pressed; each board compares what it received with what it expected and lights LD2 when they match (LD2 blinks on the master while it waits for the button).", + "inputs": [ + { + "at": "200ms", + "target": "B1.B1", + "input": "pressed", + "value": true + }, + { + "at": "300ms", + "target": "B1.B1", + "input": "pressed", + "value": false + } + ], + "assertions": [ + { + "id": "waiting", + "between": [ + "20ms", + "190ms" + ], + "probe": "led1", + "expect": { + "min": 0.2, + "max": 0.8 + }, + "measure": "duty_cycle" + }, + { + "id": "master-ok", + "between": [ + "400ms", + "590ms" + ], + "probe": "led1", + "expect": { + "logic": "1" + } + }, + { + "id": "slave-ok", + "between": [ + "400ms", + "590ms" + ], + "probe": "led2", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/spi_fullduplex_compolling/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/spi_fullduplex_compolling/scenario.json new file mode 100644 index 000000000..7dec00f3c --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/spi_fullduplex_compolling/scenario.json @@ -0,0 +1,58 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "spi_fullduplex_compolling", + "until": "600ms", + "description": "SPI_FullDuplex_ComPolling: SPI1 of B1 (the master) and B2 (the slave) exchange their buffers full duplex by polling once B1's USER button is pressed; each board compares what it received with what it expected and lights LD2 when they match (LD2 blinks on the master while it waits for the button).", + "inputs": [ + { + "at": "200ms", + "target": "B1.B1", + "input": "pressed", + "value": true + }, + { + "at": "300ms", + "target": "B1.B1", + "input": "pressed", + "value": false + } + ], + "assertions": [ + { + "id": "waiting", + "between": [ + "20ms", + "190ms" + ], + "probe": "led1", + "expect": { + "min": 0.2, + "max": 0.8 + }, + "measure": "duty_cycle" + }, + { + "id": "master-ok", + "between": [ + "400ms", + "590ms" + ], + "probe": "led1", + "expect": { + "logic": "1" + } + }, + { + "id": "slave-ok", + "between": [ + "400ms", + "590ms" + ], + "probe": "led2", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/two_boards.json b/tests/vendor/stm32cubeg4/nucleo_g474re/two_boards.json new file mode 100644 index 000000000..79245b71a --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/two_boards.json @@ -0,0 +1,133 @@ +{ + "schema_version": 1, + "kind": "project", + "name": "stm32cubeg4-two-boards", + "description": "Two NUCLEO-G474RE boards running one of STM32CubeG4's examples for a pair of boards, built from ST's unmodified sources: B1 the master (sketch.elf, the example's _Master project), B2 the slave (slave.elf, its _Slave project). As the readme's figure wires them, SPI1's SCK (PB3, CN10 pin 31), MISO (PB4, CN10 pin 27) and MOSI (PB5, CN10 pin 29) join, with the grounds. Each board is plugged into its own USB port; the master waits for its USER button.", + "policy": "electrical", + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re", + "layout": { + "x": 360, + "y": 120 + }, + "firmware": { + "image": "sketch.elf", + "format": "elf" + } + }, + { + "id": "B2", + "board": "emblink/nucleo_g474re", + "layout": { + "x": 900, + "y": 120 + }, + "firmware": { + "image": "slave.elf", + "format": "elf" + } + } + ], + "components": [ + { + "id": "USB1", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5 + }, + "layout": { + "x": 120, + "y": 160 + } + }, + { + "id": "USB2", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5 + }, + "layout": { + "x": 1300, + "y": 160 + } + }, + { + "id": "GND1", + "component": "emblink/gnd", + "layout": { + "x": 120, + "y": 320 + } + } + ], + "nets": { + "USB5V": [ + "USB1.+", + "B1.U5V" + ], + "GND": [ + "USB1.-", + "USB2.-", + "GND1.GND", + "B1.GND", + "B2.GND" + ], + "SCK": [ + "B1.CN10_31", + "B2.CN10_31" + ], + "MISO": [ + "B1.CN10_27", + "B2.CN10_27" + ], + "MOSI": [ + "B1.CN10_29", + "B2.CN10_29" + ], + "USB5V_2": [ + "USB2.+", + "B2.U5V" + ] + }, + "probes": [ + { + "id": "led1", + "target": "net:B1.PA5", + "kind": "digital" + }, + { + "id": "led2", + "target": "net:B2.PA5", + "kind": "digital" + }, + { + "id": "sck", + "target": "net:B1.PB3", + "kind": "digital" + }, + { + "id": "mosi", + "target": "net:B1.PB5", + "kind": "digital" + }, + { + "id": "miso", + "target": "net:B1.PB4", + "kind": "digital" + }, + { + "id": "master_rx", + "target": "var:B1:aRxBuffer", + "kind": "value" + }, + { + "id": "slave_rx", + "target": "var:B2:aRxBuffer", + "kind": "value" + } + ] +} diff --git a/tests/vendor/stm32cubeg4/run.py b/tests/vendor/stm32cubeg4/run.py index 5f72635a9..11162f475 100644 --- a/tests/vendor/stm32cubeg4/run.py +++ b/tests/vendor/stm32cubeg4/run.py @@ -19,7 +19,10 @@ (STM32G474RETX_FLASH.ld); - newlib-nano. The image then runs nucleo_g474re/project.json (or /project.json) -under the example's scenario.json, whose assertions must all pass. +under the example's scenario.json, whose assertions must all pass. An +example for two boards (SPI_FullDuplex_*) is a pair of projects: the +_Master one is B1's sketch.elf, the _Slave one B2's slave.elf, in +nucleo_g474re/two_boards.json. run.py --cube DIR [--embsim PATH] [--keep DIR] [EXAMPLE...] @@ -38,6 +41,14 @@ from vendor_run import run_scenario, sh # noqa: E402 NUCLEO = "Projects/NUCLEO-G474RE/" +SPI = NUCLEO + "Examples/SPI/SPI_FullDuplex_" + + +def two(master: str) -> dict: + """a pair of projects for two boards: the master's and the slave's""" + return {"dir": master + "_Master", "slave": master + "_Slave", "project": "two_boards.json"} + + EXAMPLES = { "cortexm_modeprivilege": NUCLEO + "Examples/Cortex/CORTEXM_ModePrivilege", "cortexm_processstack": NUCLEO + "Examples/Cortex/CORTEXM_ProcessStack", @@ -57,6 +68,11 @@ "iwdg_windowmode": NUCLEO + "Examples/IWDG/IWDG_WindowMode", "pwr_stop0": NUCLEO + "Examples/PWR/PWR_STOP0", "rcc_clockconfig": NUCLEO + "Examples/RCC/RCC_ClockConfig", + "spi_fullduplex_comdma": two(SPI + "ComDMA"), + # SPI_FullDuplex_ComIT: the master's fourth received byte loses a bit (the + # slave's MISO change, made in its TXE interrupt, reaches the line after + # the master's next sample); not in the suite until that is solved + "spi_fullduplex_compolling": two(SPI + "ComPolling"), "tim_octoggle": NUCLEO + "Examples/TIM/TIM_OCToggle", "tim_pwmoutput": NUCLEO + "Examples/TIM/TIM_PWMOutput", "uart_hyperterminal_dma": NUCLEO + "Examples/UART/UART_HyperTerminal_DMA", @@ -112,12 +128,15 @@ def project_sources(ide: Path) -> list: def record(name: str) -> dict: e = EXAMPLES[name] - return dict({"defines": [], "patches": {}}, **(e if isinstance(e, dict) else {"dir": e})) + return dict({"defines": [], "patches": {}, "slave": None, "project": None}, **(e if isinstance(e, dict) else {"dir": e})) -def build(cube: Path, name: str, out: Path) -> Path: +def build(cube: Path, name: str, out: Path, slave: bool = False) -> Path: + """the example's image; `slave`: the slave board's project of a pair""" rec = record(name) - ex = cube / rec["dir"] + ex = cube / (rec["slave"] if slave else rec["dir"]) + if slave: + name += "_slave" ide = ex / "STM32CubeIDE" config = debug_config((ide / ".cproject").read_text(encoding="utf-8")) defs = ["-D" + d for d in option_values(config, "definedsymbols") + rec["defines"]] @@ -141,7 +160,9 @@ def build(cube: Path, name: str, out: Path) -> Path: def project_of(name: str) -> Path: own = BOARD_DIR / name / "project.json" - return own if own.exists() else BOARD_DIR / "project.json" + if own.exists(): + return own + return BOARD_DIR / (record(name)["project"] or "project.json") def main() -> int: @@ -168,7 +189,9 @@ def main() -> int: bad = 0 for name in names: elf = build(cube, name, work) - bad += not run_scenario(Path(args.embsim), project_of(name), name, elf, BOARD_DIR / name / "scenario.json", work) + extra = {"slave.elf": build(cube, name, work, slave=True)} if record(name)["slave"] else {} + bad += not run_scenario(Path(args.embsim), project_of(name), name, elf, BOARD_DIR / name / "scenario.json", + work, extra) return 1 if bad else 0

Gp2vbC!{&YLBFf1# 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 literal 0 HcmV?d00001 diff --git a/examples/nucleo-g474re-blink-serial/firmware/build.sh b/examples/nucleo-g474re-blink-serial/firmware/build.sh new file mode 100755 index 000000000..4c216e780 --- /dev/null +++ b/examples/nucleo-g474re-blink-serial/firmware/build.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# SPDX-License-Identifier: Apache-2.0 +# Build the NUCLEO-G474RE example with clang and lld (embsim build does the +# same from project.json). +set -eu +cd "$(dirname "$0")" +clang --target=thumbv7em-none-eabihf -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -g -O2 \ + -ffreestanding -fno-builtin -nostdlib -fuse-ld=lld -Wl,--build-id=none -Wl,-T,stm32g474re.ld \ + startup.c main.c -o blink-serial.elf diff --git a/examples/nucleo-g474re-blink-serial/firmware/main.c b/examples/nucleo-g474re-blink-serial/firmware/main.c new file mode 100644 index 000000000..4016d7ce3 --- /dev/null +++ b/examples/nucleo-g474re-blink-serial/firmware/main.c @@ -0,0 +1,181 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* Copyright 2026 Junior Deogracias */ +/* main.c -- the NUCLEO-G474RE example: 170 MHz from the 24 MHz crystal X3 + * in range 1 boost, LD2 (PA5) blinking at 1 Hz from SysTick, B1 (PC13, + * active low on the Nucleo-64) counted through EXTI13's falling edges (an + * edge after 20 ms without one: B1's contacts bounce), and the STLINK-V3E's + * virtual COM port (LPUART1 on PA2/PA3 at 115200 baud) echoing in upper + * case. The registers are written directly, in the order STM32CubeG4's + * SystemClock_Config writes them (RM0440 7.2.7: the AHB at /2 for the + * switch above 80 MHz). */ +#include + +#define REG(a) (*(volatile uint32_t *)(a)) + +#define RCC_CR REG(0x40021000u) +#define RCC_CFGR REG(0x40021008u) +#define RCC_PLLCFGR REG(0x4002100Cu) +#define RCC_AHB2ENR REG(0x4002104Cu) +#define RCC_APB1ENR1 REG(0x40021058u) +#define RCC_APB1ENR2 REG(0x4002105Cu) +#define RCC_APB2ENR REG(0x40021060u) +#define RCC_CSR REG(0x40021094u) +#define PWR_CR5 REG(0x40007080u) +#define FLASH_ACR REG(0x40022000u) +#define GPIOA 0x48000000u +#define GPIOC 0x48000800u +#define MODER(p) REG((p) + 0x00u) +#define IDR(p) REG((p) + 0x10u) +#define ODR(p) REG((p) + 0x14u) +#define AFRL(p) REG((p) + 0x20u) +#define LPUART1 0x40008000u +#define LP_CR1 REG(LPUART1 + 0x00u) +#define LP_BRR REG(LPUART1 + 0x0Cu) +#define LP_ISR REG(LPUART1 + 0x1Cu) +#define LP_RDR REG(LPUART1 + 0x24u) +#define LP_TDR REG(LPUART1 + 0x28u) +#define SYSCFG_EXTICR4 REG(0x40010014u) +#define EXTI_IMR1 REG(0x40010400u) +#define EXTI_FTSR1 REG(0x4001040Cu) +#define EXTI_PR1 REG(0x40010414u) +#define SYST_CSR REG(0xE000E010u) +#define SYST_RVR REG(0xE000E014u) +#define SYST_CVR REG(0xE000E018u) +#define NVIC_ISER1 REG(0xE000E104u) +#define NVIC_ISER2 REG(0xE000E108u) +#define FLASH_SIZE (*(volatile uint16_t *)0x1FFF75E0u) + +static volatile uint32_t ticks, presses, reported, last_edge; + +static void putc_(char c) +{ + while (!(LP_ISR & (1u << 7))) /* TXE */ + ; + LP_TDR = (uint8_t)c; +} + +static void puts_(const char *s) +{ + while (*s) + putc_(*s++); +} + +static void putu(uint32_t v) +{ + char b[11]; + int n = 0; + do { + b[n++] = (char)('0' + v % 10u); + v /= 10u; + } while (v); + while (n) + putc_(b[--n]); +} + +/* range 1 boost, HSE (the crystal) through the PLL: 24 MHz / 6 x 85 / 2 = + * 170 MHz, four wait states */ +static void clock_170mhz(void) +{ + RCC_APB1ENR1 |= 1u << 28; /* PWREN */ + PWR_CR5 &= ~(1u << 8); /* R1MODE 0: range 1 boost */ + RCC_CR |= 1u << 16; /* HSEON */ + while (!(RCC_CR & (1u << 17))) /* HSERDY: the crystal's start-up */ + ; + RCC_PLLCFGR = 3u | (5u << 4) | (85u << 8) | (1u << 24); /* HSE, M /6, N 85, R /2, PLLREN */ + RCC_CR |= 1u << 24; /* PLLON */ + while (!(RCC_CR & (1u << 25))) + ; + FLASH_ACR = (FLASH_ACR & ~0xFu) | 4u | (1u << 8); /* LATENCY 4, PRFTEN */ + RCC_CFGR = (RCC_CFGR & ~0xF0u) | 0x80u; /* HPRE /2 for the switch */ + RCC_CFGR = (RCC_CFGR & ~3u) | 3u; /* SW PLL */ + while (((RCC_CFGR >> 2) & 3u) != 3u) + ; + for (volatile int i = 0; i < 100; i++) /* the 1 us the AHB stays at /2 */ + ; + RCC_CFGR &= ~0xF0u; /* HPRE /1 */ +} + +/* SYSCLK as the RCC's registers give it */ +static uint32_t sysclk_khz(void) +{ + uint32_t pll = RCC_PLLCFGR; + uint32_t m = ((pll >> 4) & 0xFu) + 1u, n = (pll >> 8) & 0x7Fu, r = 2u * (((pll >> 25) & 3u) + 1u); + return 24000u / m * n / r; +} + +void SysTick_Handler(void) +{ + if (++ticks % 500u == 0u) + ODR(GPIOA) ^= 1u << 5; /* LD2 */ +} + +void EXTI15_10_IRQHandler(void) +{ + if (EXTI_PR1 & (1u << 13)) { + uint32_t now = ticks; + EXTI_PR1 = 1u << 13; + /* B1's contacts bounce: a press is a falling edge after the line has + * been still for 20 ms */ + if (!(IDR(GPIOC) & (1u << 13)) && now - last_edge >= 20u) + presses++; + last_edge = now; + } +} + +void LPUART1_IRQHandler(void) +{ + if (LP_ISR & (1u << 5)) { /* RXNE */ + char c = (char)LP_RDR; + if (c >= 'a' && c <= 'z') + c = (char)(c - 'a' + 'A'); + LP_TDR = (uint8_t)c; + } +} + +int main(void) +{ + uint32_t csr = RCC_CSR; + clock_170mhz(); + RCC_AHB2ENR |= (1u << 0) | (1u << 2); /* GPIOA, GPIOC */ + RCC_APB1ENR2 |= 1u << 0; /* LPUART1 */ + RCC_APB2ENR |= 1u << 0; /* SYSCFG */ + (void)RCC_APB2ENR; + /* PA5 an output (LD2); PA2, PA3 AF12 (LPUART1 to the STLINK-V3E); PC13 + * an input (B1, held high by the board's pull-up) */ + MODER(GPIOA) = (MODER(GPIOA) & ~((3u << 10) | (0xFu << 4))) | (1u << 10) | (0xAu << 4); + AFRL(GPIOA) = (AFRL(GPIOA) & ~(0xFFu << 8)) | (0xCCu << 8); + MODER(GPIOC) &= ~(3u << 26); + /* 115200 baud from PCLK1 = 170 MHz: BRR = 256 x 170 MHz / 115200 */ + LP_BRR = 377778u; + LP_CR1 = (1u << 5) | (1u << 3) | (1u << 2); /* RXNEIE, TE, RE */ + LP_CR1 |= 1u; /* UE */ + while ((LP_ISR & (3u << 21)) != (3u << 21)) /* TEACK, REACK */ + ; + /* B1: EXTI13 on port C, falling edge (the Nucleo-64's button pulls down) */ + SYSCFG_EXTICR4 = (SYSCFG_EXTICR4 & ~(0xFu << 4)) | (2u << 4); + EXTI_FTSR1 |= 1u << 13; + EXTI_IMR1 |= 1u << 13; + NVIC_ISER1 = 1u << (40 - 32); + NVIC_ISER2 = 1u << (91 - 64); + /* SysTick every millisecond from HCLK */ + SYST_RVR = sysclk_khz() - 1u; + SYST_CVR = 0; + SYST_CSR = 7u; + + puts_("nucleo-g474re: STM32G474RE, flash "); + putu(FLASH_SIZE); + puts_(" KB, SYSCLK "); + putu(sysclk_khz()); + puts_(" kHz, reset "); + puts_((csr & (1u << 27)) ? "por" : (csr & (1u << 28)) ? "software" : (csr & (1u << 26)) ? "pin" : "other"); + puts_("\r\n"); + for (;;) { + __asm volatile("wfi"); + if (presses != reported) { + reported = presses; + puts_("button "); + putu(reported); + puts_("\r\n"); + } + } +} diff --git a/examples/nucleo-g474re-blink-serial/firmware/startup.c b/examples/nucleo-g474re-blink-serial/firmware/startup.c new file mode 100644 index 000000000..87a38be0c --- /dev/null +++ b/examples/nucleo-g474re-blink-serial/firmware/startup.c @@ -0,0 +1,54 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* Copyright 2026 Junior Deogracias */ +/* startup.c -- the example's start-up on the STM32G474RE: the vector table + * (the core's 16 entries and the part's 102 interrupts, each a weak alias of + * a handler that stops), the FPU enabled as CMSIS's SystemInit does, .data + * copied from flash, .bss cleared, then main. Freestanding: no C library. */ +#include + +extern uint32_t _estack, _sidata, _sdata, _edata, _sbss, _ebss; +int main(void); + +void Reset_Handler(void); +void Default_Handler(void) +{ + for (;;) + ; +} + +#define WEAK(name) void name(void) __attribute__((weak, alias("Default_Handler"))) +WEAK(NMI_Handler); WEAK(HardFault_Handler); WEAK(MemManage_Handler); WEAK(BusFault_Handler); +WEAK(UsageFault_Handler); WEAK(SVC_Handler); WEAK(DebugMon_Handler); WEAK(PendSV_Handler); +WEAK(SysTick_Handler); WEAK(LPUART1_IRQHandler); WEAK(EXTI15_10_IRQHandler); + +#define IRQ(n) (16 + (n)) +__attribute__((section(".isr_vector"), used)) void (*const vectors[16 + 102])(void) = { + [0] = (void (*)(void))(uintptr_t)&_estack, + [1] = Reset_Handler, + [2] = NMI_Handler, + [3] = HardFault_Handler, + [4] = MemManage_Handler, + [5] = BusFault_Handler, + [6] = UsageFault_Handler, + [11] = SVC_Handler, + [12] = DebugMon_Handler, + [14] = PendSV_Handler, + [15] = SysTick_Handler, + [IRQ(40)] = EXTI15_10_IRQHandler, + [IRQ(91)] = LPUART1_IRQHandler, +}; + +void Reset_Handler(void) +{ + uint32_t *src = &_sidata, *dst = &_sdata; + /* CP10 and CP11 full access: the FPU, as SystemInit enables it */ + *(volatile uint32_t *)0xE000ED88u |= 0xFu << 20; + __asm volatile("dsb\n\tisb"); + while (dst < &_edata) + *dst++ = *src++; + for (dst = &_sbss; dst < &_ebss;) + *dst++ = 0; + main(); + for (;;) + ; +} diff --git a/examples/nucleo-g474re-blink-serial/firmware/stm32g474re.ld b/examples/nucleo-g474re-blink-serial/firmware/stm32g474re.ld new file mode 100644 index 000000000..e79fc0ffe --- /dev/null +++ b/examples/nucleo-g474re-blink-serial/firmware/stm32g474re.ld @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* Copyright 2026 Junior Deogracias */ +/* STM32G474RE: 512 KiB of flash at 0x08000000, 128 KiB of SRAM at 0x20000000 (SRAM1 80 KiB, SRAM2 16 KiB, then the CCM SRAM's 32 KiB alias) */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 128K +} +ENTRY(Reset_Handler) +_estack = ORIGIN(RAM) + LENGTH(RAM); +SECTIONS +{ + .isr_vector : { KEEP(*(.isr_vector)) } > FLASH + .text : { *(.text*) *(.rodata*) . = ALIGN(4); } > FLASH + .ARM.exidx : { *(.ARM.exidx*) } > FLASH + _sidata = LOADADDR(.data); + .data : { _sdata = .; *(.data*) . = ALIGN(4); _edata = .; } > RAM AT > FLASH + .bss (NOLOAD) : { _sbss = .; *(.bss*) *(COMMON) . = ALIGN(4); _ebss = .; } > RAM +} diff --git a/examples/nucleo-g474re-blink-serial/project.json b/examples/nucleo-g474re-blink-serial/project.json new file mode 100644 index 000000000..b5df1535d --- /dev/null +++ b/examples/nucleo-g474re-blink-serial/project.json @@ -0,0 +1,105 @@ +{ + "schema_version": 1, + "kind": "project", + "name": "nucleo-g474re-blink-serial", + "description": "A NUCLEO-G474RE running firmware/main.c on its STM32G474RE (Cortex-M4F): the 24 MHz crystal X3 through the PLL to 170 MHz in range 1 boost, LD2 on PA5 blinking at 1 Hz from SysTick, the blue USER button B1 on PC13 (active low) counted through EXTI13's falling edge, and the STLINK-V3E's virtual COM port (LPUART1 on PA2/PA3 at 115200 baud) echoing what it receives in upper case. The board runs from its STLINK-V3E USB connector's 5 V.", + "policy": "electrical", + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re", + "layout": { + "x": 360, + "y": 120 + }, + "firmware": { + "image": "firmware/blink-serial.elf", + "format": "elf", + "toolchain": "clang", + "sources": [ + "firmware/startup.c", + "firmware/main.c" + ], + "flags": [ + "-ffreestanding", + "-fno-builtin" + ], + "linker_script": "firmware/stm32g474re.ld" + } + } + ], + "components": [ + { + "id": "USB", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5 + }, + "layout": { + "x": 120, + "y": 160 + } + }, + { + "id": "GND1", + "component": "emblink/gnd", + "layout": { + "x": 120, + "y": 320 + } + } + ], + "nets": { + "USB5V": [ + "USB.+", + "B1.U5V" + ], + "GND": [ + "USB.-", + "GND1.GND", + "B1.GND" + ] + }, + "probes": [ + { + "id": "console", + "target": "serial:B1", + "kind": "serial" + }, + { + "id": "led", + "target": "net:B1.PA5", + "kind": "digital" + }, + { + "id": "btn", + "target": "net:B1.PC13", + "kind": "digital" + }, + { + "id": "vdd", + "target": "net:B1.VDD", + "kind": "analog", + "rate_hz": 1000 + }, + { + "id": "presses", + "target": "var:B1:presses", + "kind": "value" + }, + { + "id": "cfgr", + "target": "reg:B1.RCC.CFGR", + "kind": "value" + }, + { + "id": "flash_size", + "target": "mem:B1:0x1FFF75E0:2", + "kind": "value" + } + ], + "scenarios": [ + "scenarios/blink.json" + ] +} diff --git a/examples/nucleo-g474re-blink-serial/scenarios/blink.json b/examples/nucleo-g474re-blink-serial/scenarios/blink.json new file mode 100644 index 000000000..e27821d01 --- /dev/null +++ b/examples/nucleo-g474re-blink-serial/scenarios/blink.json @@ -0,0 +1,113 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "blink", + "until": "2.2s", + "description": "The banner with SYSCLK as the RCC's registers give it and the flash size from the engineering bytes' FLASH_SIZE; LD2's 1 Hz blink from SysTick; a press of B1 through EXTI13's falling edge; text sent to the virtual COM port echoed in upper case.", + "inputs": [ + { + "at": "1.2s", + "target": "B1.B1", + "input": "pressed", + "value": true + }, + { + "at": "1.25s", + "target": "B1.B1", + "input": "pressed", + "value": false + }, + { + "at": "1.5s", + "target": "B1", + "input": "serial", + "value": "nucleo" + } + ], + "assertions": [ + { + "id": "banner", + "at": "30ms", + "probe": "console", + "expect": { + "contains": "nucleo-g474re: STM32G474RE, flash 512 KB, SYSCLK 170000 kHz, reset por" + } + }, + { + "id": "vdd", + "at": "20ms", + "probe": "vdd", + "expect": { + "min_v": 3.25, + "max_v": 3.35 + } + }, + { + "id": "led-off", + "at": "0.4s", + "probe": "led", + "expect": { + "logic": "0" + } + }, + { + "id": "led-on", + "at": "0.6s", + "probe": "led", + "expect": { + "logic": "1" + } + }, + { + "id": "blink", + "between": [ + "100ms", + "2.2s" + ], + "probe": "led", + "expect": { + "edges": 4 + } + }, + { + "id": "button", + "at": "1.3s", + "probe": "console", + "expect": { + "contains": "button 1" + } + }, + { + "id": "echo", + "at": "1.6s", + "probe": "console", + "expect": { + "contains": "NUCLEO" + } + }, + { + "id": "presses", + "at": "1.3s", + "probe": "presses", + "expect": { + "equals": 1 + } + }, + { + "id": "on-pll", + "at": "30ms", + "probe": "cfgr", + "expect": { + "equals": 15 + } + }, + { + "id": "flash-size", + "at": "30ms", + "probe": "flash_size", + "expect": { + "equals": 512 + } + } + ] +} diff --git a/tests/vendor/README.md b/tests/vendor/README.md index 65cf3410c..2ba80dd39 100644 --- a/tests/vendor/README.md +++ b/tests/vendor/README.md @@ -11,6 +11,7 @@ toolchains. | `arduino/` | ArduinoCore-avr (Blink, a tour of the core) | `emblink/arduino_uno` | | `stm32cube/` | ST's STM32F1 HAL and CMSIS device files | `emblink/bluepill` | | `stm32cubef4/` | STM32CubeF4's own examples for the NUCLEO-F446RE (GPIO, HAL time bases, RCC, RTC, timers, UART, PWR's low-power modes, I2C between two boards, EEPROM emulation in flash) and, with `--board nucleo_f446ze`, for the NUCLEO-F446ZE (ADC, CRC, Cortex, DMA, flash erase and program, GPIO, the watchdogs, RTC, seven timer examples, UART, the USB device HID mouse on a computer's port, the USB host HID and MSC demos with Adafruit's 1.8" TFT shield, a mouse and a flash drive; their middleware and components, stm32-mw-usb-device v2.11.4, stm32-mw-usb-host, stm32-mw-fatfs, stm32-st7735 and stm32-bsp-common at the commits CubeF4 pins, fetched like the rest and copied into CubeF4's tree, with its Adafruit_Shield BSP and Utilities' LCD log and fonts) | `emblink/nucleo_f446re`, `emblink/nucleo_f446ze` | +| `stm32cubeg4/` | STM32CubeG4's own examples for the NUCLEO-G474RE (GPIO, EXTI, the HAL's time base, RCC, UART on LPUART1, CRC, Cortex, flash erase, program and fast program, the IWDG and WWDG, Stop 0, TIM1's PWM and output compare), built from a CubeG4 checkout with its HAL, CMSIS device and Nucleo BSP submodules | `emblink/nucleo_g474re` | | `pico-sdk/` | The Raspberry Pi Pico SDK | `emblink/pico` | | `micropython/` | MicroPython v1.24.1's rp2 port (RPI_PICO), built with its own Makefile and copied as firmware.uf2 onto the Pico's BOOTSEL drive; its prompt over its USB serial port: arithmetic, `machine.Pin` lighting the LED, a file in its flash filesystem | `emblink/pico` | | `freedom-metal/` | SiFive's freedom-metal and freedom-e-sdk's examples | `emblink/hifive1_revb` | diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/cortexm_modeprivilege/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/cortexm_modeprivilege/scenario.json new file mode 100644 index 000000000..c42527265 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/cortexm_modeprivilege/scenario.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "cortexm_modeprivilege", + "until": "500ms", + "description": "CORTEXM_ModePrivilege: thread mode switched to unprivileged and to the process stack through CONTROL, back to privileged by an SVC; LD2 on when the sequence completes.", + "inputs": [], + "assertions": [ + { + "id": "pass", + "between": [ + "100ms", + "490ms" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/cortexm_processstack/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/cortexm_processstack/scenario.json new file mode 100644 index 000000000..9b37a5009 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/cortexm_processstack/scenario.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "cortexm_processstack", + "until": "500ms", + "description": "CORTEXM_ProcessStack: the process stack selected through CONTROL and PSP, checked by an SVC handler; LD2 on in case of success.", + "inputs": [], + "assertions": [ + { + "id": "pass", + "between": [ + "100ms", + "490ms" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/cortexm_systick/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/cortexm_systick/scenario.json new file mode 100644 index 000000000..6a3bc8234 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/cortexm_systick/scenario.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "cortexm_systick", + "until": "1.2s", + "description": "CORTEXM_SysTick: LD2 toggled every HAL_Delay(50), SysTick's 1 ms at 170 MHz: 51 ms a toggle.", + "inputs": [], + "assertions": [ + { + "id": "blink", + "between": [ + "100ms", + "1.12s" + ], + "probe": "led", + "expect": { + "edges": 20 + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/crc_bytes_stream_7bit_crc/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/crc_bytes_stream_7bit_crc/scenario.json new file mode 100644 index 000000000..a54637833 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/crc_bytes_stream_7bit_crc/scenario.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "crc_bytes_stream_7bit_crc", + "until": "500ms", + "description": "CRC BYTES STREAM 7BIT CRC: 7-bit CRCs of polynomial 0x65 over byte streams of 5, 17, 1 and 2 bytes; LD2 on means each value matched, a 1 s blink an error.", + "inputs": [], + "assertions": [ + { + "id": "pass", + "between": [ + "50ms", + "490ms" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/crc_data_reversing_16bit_crc/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/crc_data_reversing_16bit_crc/scenario.json new file mode 100644 index 000000000..01ad17622 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/crc_data_reversing_16bit_crc/scenario.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "crc_data_reversing_16bit_crc", + "until": "500ms", + "description": "CRC DATA REVERSING 16BIT CRC: CCITT's 16-bit CRC with the input reversed by words (a last byte reversed as a byte) and the output reversed, against the same without reversal over the bytes reversed by hand; LD2 on means each value matched, a 1 s blink an error.", + "inputs": [], + "assertions": [ + { + "id": "pass", + "between": [ + "50ms", + "490ms" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/crc_example/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/crc_example/scenario.json new file mode 100644 index 000000000..5d91fb9a0 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/crc_example/scenario.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "crc_example", + "until": "500ms", + "description": "CRC EXAMPLE: the CRC-32 of 114 words with the default polynomial and initial value, 0x379E9F06; LD2 on means each value matched, a 1 s blink an error.", + "inputs": [], + "assertions": [ + { + "id": "pass", + "between": [ + "50ms", + "490ms" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/crc_userdefinedpolynomial/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/crc_userdefinedpolynomial/scenario.json new file mode 100644 index 000000000..5ec434baa --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/crc_userdefinedpolynomial/scenario.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "crc_userdefinedpolynomial", + "until": "500ms", + "description": "CRC USERDEFINEDPOLYNOMIAL: an 8-bit CRC of polynomial 0x9B over the word 0x1234, 0xEF; LD2 on means each value matched, a 1 s blink an error.", + "inputs": [], + "assertions": [ + { + "id": "pass", + "between": [ + "50ms", + "490ms" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/flash_eraseprogram/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/flash_eraseprogram/scenario.json new file mode 100644 index 000000000..90d123a19 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/flash_eraseprogram/scenario.json @@ -0,0 +1,32 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "flash_eraseprogram", + "until": "6.5s", + "description": "FLASH_EraseProgram: bank 1's pages 4 to 127 erased (124 x 22.02 ms) then programmed by double words (31744 x 81.7 us) by a program running from the same bank, which stalls through each operation: about 5.3 s before LD2 comes on, as on the board.", + "inputs": [], + "assertions": [ + { + "id": "working", + "between": [ + "100ms", + "5.2s" + ], + "probe": "led", + "expect": { + "logic": "0" + } + }, + { + "id": "pass", + "between": [ + "5.6s", + "6.4s" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/flash_fastprogram/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/flash_fastprogram/scenario.json new file mode 100644 index 000000000..403a24a65 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/flash_fastprogram/scenario.json @@ -0,0 +1,32 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "flash_fastprogram", + "until": "3.6s", + "description": "FLASH_FastProgram: bank 2 mass-erased (MER2, 22.13 ms), then programmed a 256-byte row at a time (FSTPG, 1024 x 2.61 ms) by a program running from bank 1, which goes on meanwhile and polls BSY: about 2.7 s before LD2 comes on once every word reads back.", + "inputs": [], + "assertions": [ + { + "id": "working", + "between": [ + "100ms", + "2.6s" + ], + "probe": "led", + "expect": { + "logic": "0" + } + }, + { + "id": "pass", + "between": [ + "2.8s", + "3.5s" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/gpio_exti/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/gpio_exti/scenario.json new file mode 100644 index 000000000..8aaf5b5f5 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/gpio_exti/scenario.json @@ -0,0 +1,68 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "gpio_exti", + "until": "1.2s", + "description": "GPIO_EXTI: EXTI15_10 on PC13's falling edge (B1 pressed: active low on the NUCLEO-G474RE) toggles LD2 in its callback, once per press.", + "inputs": [ + { + "at": "200ms", + "target": "B1.B1", + "input": "pressed", + "value": true + }, + { + "at": "300ms", + "target": "B1.B1", + "input": "pressed", + "value": false + }, + { + "at": "700ms", + "target": "B1.B1", + "input": "pressed", + "value": true + }, + { + "at": "800ms", + "target": "B1.B1", + "input": "pressed", + "value": false + } + ], + "assertions": [ + { + "id": "dark", + "between": [ + "100ms", + "190ms" + ], + "probe": "led", + "expect": { + "logic": "0" + } + }, + { + "id": "first", + "between": [ + "250ms", + "650ms" + ], + "probe": "led", + "expect": { + "logic": "1" + } + }, + { + "id": "second", + "between": [ + "750ms", + "1.15s" + ], + "probe": "led", + "expect": { + "logic": "0" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/gpio_iotoggle/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/gpio_iotoggle/scenario.json new file mode 100644 index 000000000..9c3ea7b38 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/gpio_iotoggle/scenario.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "gpio_iotoggle", + "until": "1.2s", + "description": "GPIO_IOToggle on the NUCLEO-G474RE: LD2 on PA5 toggled by HAL_GPIO_TogglePin every HAL_Delay(100), 101 ms of SysTick at 170 MHz from HSI16 through the PLL.", + "inputs": [], + "assertions": [ + { + "id": "blink", + "between": [ + "150ms", + "1.16s" + ], + "probe": "led", + "expect": { + "edges": 10 + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/hal_timebase_tim/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/hal_timebase_tim/scenario.json new file mode 100644 index 000000000..348b50ac0 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/hal_timebase_tim/scenario.json @@ -0,0 +1,21 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "hal_timebase_tim", + "until": "3.5s", + "description": "HAL_TimeBase_TIM: the HAL's time base on TIM6's update interrupt instead of SysTick, LD2 toggled every HAL_Delay(1000).", + "inputs": [], + "assertions": [ + { + "id": "blink", + "between": [ + "500ms", + "3.4s" + ], + "probe": "led", + "expect": { + "edges": 3 + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/iwdg_reset/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/iwdg_reset/scenario.json new file mode 100644 index 000000000..eb357b466 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/iwdg_reset/scenario.json @@ -0,0 +1,47 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "iwdg_reset", + "until": "6s", + "description": "IWDG_Reset: LSI measured by TIM16's input capture (TISEL: LSI on TI1), the IWDG set to time out after 1 s and refreshed every 990 ms while LD2 toggles. B1's handler (on the release: the BSP takes B1 as a rising edge) turns LD2 off and stores a word at 0x00040001, which its comment calls unmapped; on the G474RE's 512 KiB that address is inside the flash's boot alias, so the store reaches the flash interface with PG clear and sets PGSERR without a fault (RM0440 5.3.9), and the program goes on refreshing the IWDG: no reset. (On a 128 KiB part, the example's first target, the address is unmapped and the hard fault lets the IWDG reset it.)", + "inputs": [ + { + "at": "2500ms", + "target": "B1.B1", + "input": "pressed", + "value": true + }, + { + "at": "2600ms", + "target": "B1.B1", + "input": "pressed", + "value": false + } + ], + "assertions": [ + { + "id": "running", + "between": [ + "300ms", + "2.45s" + ], + "probe": "led", + "expect": { + "edges": 2 + } + }, + { + "id": "no-reset", + "between": [ + "3s", + "5.9s" + ], + "probe": "led", + "expect": { + "min": 0.3, + "max": 0.7 + }, + "measure": "duty_cycle" + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/iwdg_windowmode/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/iwdg_windowmode/scenario.json new file mode 100644 index 000000000..0fd9066e9 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/iwdg_windowmode/scenario.json @@ -0,0 +1,47 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "iwdg_windowmode", + "until": "6.5s", + "description": "IWDG_WindowMode: the IWDG at LSI / 16 with a reload of 1561 (780 ms) and a window of 800, refreshed every 450 ms, after the window opens, while LD2 toggles; B1's callback shortens the wait to 200 ms, so the next refresh comes while the counter is still above the window and the IWDG resets the part (IWDG_WINR), which then holds LD2 on for 4 s (RCC_CSR's IWDGRSTF).", + "inputs": [ + { + "at": "2000ms", + "target": "B1.B1", + "input": "pressed", + "value": true + }, + { + "at": "2100ms", + "target": "B1.B1", + "input": "pressed", + "value": false + } + ], + "assertions": [ + { + "id": "running", + "between": [ + "300ms", + "1.95s" + ], + "probe": "led", + "expect": { + "min": 0.3, + "max": 0.7 + }, + "measure": "duty_cycle" + }, + { + "id": "reset", + "between": [ + "3.2s", + "6s" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/project.json b/tests/vendor/stm32cubeg4/nucleo_g474re/project.json new file mode 100644 index 000000000..580203a2c --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/project.json @@ -0,0 +1,71 @@ +{ + "schema_version": 1, + "kind": "project", + "name": "stm32cubeg4-nucleo-g474re", + "description": "A NUCLEO-G474RE running one of STM32CubeG4's examples for it, built from ST's unmodified sources (tests/vendor/stm32cubeg4/run.py puts the image beside this file as sketch.elf), on its STLINK-V3E's USB power. The console is the STLINK-V3E's virtual COM port on LPUART1; LD2 is on PA5, B1 on PC13 (active low).", + "policy": "electrical", + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re", + "layout": { + "x": 360, + "y": 120 + }, + "firmware": { + "image": "sketch.elf", + "format": "elf" + } + } + ], + "components": [ + { + "id": "USB", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5 + }, + "layout": { + "x": 120, + "y": 160 + } + }, + { + "id": "GND1", + "component": "emblink/gnd", + "layout": { + "x": 120, + "y": 320 + } + } + ], + "nets": { + "USB5V": [ + "USB.+", + "B1.U5V" + ], + "GND": [ + "USB.-", + "GND1.GND", + "B1.GND" + ] + }, + "probes": [ + { + "id": "console", + "target": "serial:B1", + "kind": "serial" + }, + { + "id": "led", + "target": "net:B1.PA5", + "kind": "digital" + }, + { + "id": "button", + "target": "net:B1.PC13", + "kind": "digital" + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/pwr_stop0/project.json b/tests/vendor/stm32cubeg4/nucleo_g474re/pwr_stop0/project.json new file mode 100644 index 000000000..a0e4e8639 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/pwr_stop0/project.json @@ -0,0 +1,76 @@ +{ + "schema_version": 1, + "kind": "project", + "name": "stm32cubeg4-nucleo-g474re-pwr-stop0", + "description": "A NUCLEO-G474RE running one of STM32CubeG4's examples for it, built from ST's unmodified sources (tests/vendor/stm32cubeg4/run.py puts the image beside this file as sketch.elf), on its STLINK-V3E's USB power. The console is the STLINK-V3E's virtual COM port on LPUART1; LD2 is on PA5, B1 on PC13 (active low). An analog probe on PA5, which the example leaves floating (analog mode) in Stop 0.", + "policy": "electrical", + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re", + "layout": { + "x": 360, + "y": 120 + }, + "firmware": { + "image": "sketch.elf", + "format": "elf" + } + } + ], + "components": [ + { + "id": "USB", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5 + }, + "layout": { + "x": 120, + "y": 160 + } + }, + { + "id": "GND1", + "component": "emblink/gnd", + "layout": { + "x": 120, + "y": 320 + } + } + ], + "nets": { + "USB5V": [ + "USB.+", + "B1.U5V" + ], + "GND": [ + "USB.-", + "GND1.GND", + "B1.GND" + ] + }, + "probes": [ + { + "id": "console", + "target": "serial:B1", + "kind": "serial" + }, + { + "id": "led", + "target": "net:B1.PA5", + "kind": "digital" + }, + { + "id": "button", + "target": "net:B1.PC13", + "kind": "digital" + }, + { + "id": "pa5v", + "target": "net:B1.PA5", + "kind": "analog" + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/pwr_stop0/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/pwr_stop0/scenario.json new file mode 100644 index 000000000..725edf779 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/pwr_stop0/scenario.json @@ -0,0 +1,60 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "pwr_stop0", + "until": "11s", + "description": "PWR_STOP0: LD2 toggled from SysTick for 5 s at 170 MHz, then every port but C put in analog mode (LD2 dark) and Stop 0 entered by WFI with SysTick suspended; B1's press (a falling edge on EXTI13) wakes the part on HSI16, SYSCLKConfig_STOP brings the PLL back and LD2 toggles for 5 s more.", + "inputs": [ + { + "at": "7500ms", + "target": "B1.B1", + "input": "pressed", + "value": true + }, + { + "at": "7600ms", + "target": "B1.B1", + "input": "pressed", + "value": false + } + ], + "assertions": [ + { + "id": "run", + "between": [ + "500ms", + "4.8s" + ], + "probe": "led", + "expect": { + "min": 0.3, + "max": 0.7 + }, + "measure": "duty_cycle" + }, + { + "id": "stop", + "between": [ + "5.3s", + "7.4s" + ], + "probe": "pa5v", + "expect": { + "max_v": 0.5 + } + }, + { + "id": "woken", + "between": [ + "8s", + "10.9s" + ], + "probe": "led", + "expect": { + "min": 0.3, + "max": 0.7 + }, + "measure": "duty_cycle" + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/rcc_clockconfig/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/rcc_clockconfig/scenario.json new file mode 100644 index 000000000..7db9ead13 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/rcc_clockconfig/scenario.json @@ -0,0 +1,71 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "rcc_clockconfig", + "until": "2s", + "description": "RCC_ClockConfig: SYSCLK at 170 MHz from the PLL on HSI16, LD2 toggled every HAL_Delay(100); each press of B1 moves the PLL to the other source (the 24 MHz crystal X3, ready after its 2 ms start-up, then back to HSI16) through SYSCLK on the source it leaves, and LD2 keeps its rate.", + "inputs": [ + { + "at": "600ms", + "target": "B1.B1", + "input": "pressed", + "value": true + }, + { + "at": "650ms", + "target": "B1.B1", + "input": "pressed", + "value": false + }, + { + "at": "1300ms", + "target": "B1.B1", + "input": "pressed", + "value": true + }, + { + "at": "1350ms", + "target": "B1.B1", + "input": "pressed", + "value": false + } + ], + "assertions": [ + { + "id": "hsi", + "between": [ + "100ms", + "590ms" + ], + "probe": "led", + "expect": { + "frequency_hz": 4.95 + }, + "tolerance": 0.06 + }, + { + "id": "hse", + "between": [ + "750ms", + "1.24s" + ], + "probe": "led", + "expect": { + "frequency_hz": 4.95 + }, + "tolerance": 0.06 + }, + { + "id": "hsi-again", + "between": [ + "1.45s", + "1.95s" + ], + "probe": "led", + "expect": { + "frequency_hz": 4.95 + }, + "tolerance": 0.06 + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/tim_octoggle/project.json b/tests/vendor/stm32cubeg4/nucleo_g474re/tim_octoggle/project.json new file mode 100644 index 000000000..748c64496 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/tim_octoggle/project.json @@ -0,0 +1,91 @@ +{ + "schema_version": 1, + "kind": "project", + "name": "stm32cubeg4-nucleo-g474re-tim-octoggle", + "description": "A NUCLEO-G474RE running one of STM32CubeG4's examples for it, built from ST's unmodified sources (tests/vendor/stm32cubeg4/run.py puts the image beside this file as sketch.elf), on its STLINK-V3E's USB power. The console is the STLINK-V3E's virtual COM port on LPUART1; LD2 is on PA5, B1 on PC13 (active low). Probes on TIM1's channels, PA8 to PA11.", + "policy": "electrical", + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re", + "layout": { + "x": 360, + "y": 120 + }, + "firmware": { + "image": "sketch.elf", + "format": "elf" + } + } + ], + "components": [ + { + "id": "USB", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5 + }, + "layout": { + "x": 120, + "y": 160 + } + }, + { + "id": "GND1", + "component": "emblink/gnd", + "layout": { + "x": 120, + "y": 320 + } + } + ], + "nets": { + "USB5V": [ + "USB.+", + "B1.U5V" + ], + "GND": [ + "USB.-", + "GND1.GND", + "B1.GND" + ] + }, + "probes": [ + { + "id": "console", + "target": "serial:B1", + "kind": "serial" + }, + { + "id": "led", + "target": "net:B1.PA5", + "kind": "digital" + }, + { + "id": "button", + "target": "net:B1.PC13", + "kind": "digital" + }, + { + "id": "pa8", + "target": "net:B1.PA8", + "kind": "digital" + }, + { + "id": "pa9", + "target": "net:B1.PA9", + "kind": "digital" + }, + { + "id": "pa10", + "target": "net:B1.PA10", + "kind": "digital" + }, + { + "id": "pa11", + "target": "net:B1.PA11", + "kind": "digital" + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/tim_octoggle/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/tim_octoggle/scenario.json new file mode 100644 index 000000000..4f8c9c1c3 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/tim_octoggle/scenario.json @@ -0,0 +1,71 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "tim_octoggle", + "until": "100ms", + "description": "TIM_OCToggle: TIM1 at 17 MHz, its channels in toggle mode, each CC interrupt moving CCRx on by its value: 2125 Hz on PA8, 4250 Hz on PA9, 8500 Hz on PA10, 17 kHz on PA11, each at 50 %.", + "inputs": [], + "assertions": [ + { + "id": "pa8-f", + "between": [ + "20ms", + "90ms" + ], + "probe": "pa8", + "expect": { + "frequency_hz": 2125 + }, + "tolerance": 0.01 + }, + { + "id": "pa9-f", + "between": [ + "20ms", + "90ms" + ], + "probe": "pa9", + "expect": { + "frequency_hz": 4250 + }, + "tolerance": 0.01 + }, + { + "id": "pa10-f", + "between": [ + "20ms", + "90ms" + ], + "probe": "pa10", + "expect": { + "frequency_hz": 8500 + }, + "tolerance": 0.01 + }, + { + "id": "pa11-f", + "between": [ + "20ms", + "90ms" + ], + "probe": "pa11", + "expect": { + "frequency_hz": 17000 + }, + "tolerance": 0.01 + }, + { + "id": "pa8-duty", + "between": [ + "20ms", + "90ms" + ], + "probe": "pa8", + "expect": { + "min": 0.49, + "max": 0.51 + }, + "measure": "duty_cycle" + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/tim_pwmoutput/project.json b/tests/vendor/stm32cubeg4/nucleo_g474re/tim_pwmoutput/project.json new file mode 100644 index 000000000..d0f8e9b26 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/tim_pwmoutput/project.json @@ -0,0 +1,91 @@ +{ + "schema_version": 1, + "kind": "project", + "name": "stm32cubeg4-nucleo-g474re-tim-pwmoutput", + "description": "A NUCLEO-G474RE running one of STM32CubeG4's examples for it, built from ST's unmodified sources (tests/vendor/stm32cubeg4/run.py puts the image beside this file as sketch.elf), on its STLINK-V3E's USB power. The console is the STLINK-V3E's virtual COM port on LPUART1; LD2 is on PA5, B1 on PC13 (active low). Probes on TIM1's channels, PA8 to PA11.", + "policy": "electrical", + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re", + "layout": { + "x": 360, + "y": 120 + }, + "firmware": { + "image": "sketch.elf", + "format": "elf" + } + } + ], + "components": [ + { + "id": "USB", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5 + }, + "layout": { + "x": 120, + "y": 160 + } + }, + { + "id": "GND1", + "component": "emblink/gnd", + "layout": { + "x": 120, + "y": 320 + } + } + ], + "nets": { + "USB5V": [ + "USB.+", + "B1.U5V" + ], + "GND": [ + "USB.-", + "GND1.GND", + "B1.GND" + ] + }, + "probes": [ + { + "id": "console", + "target": "serial:B1", + "kind": "serial" + }, + { + "id": "led", + "target": "net:B1.PA5", + "kind": "digital" + }, + { + "id": "button", + "target": "net:B1.PC13", + "kind": "digital" + }, + { + "id": "pa8", + "target": "net:B1.PA8", + "kind": "digital" + }, + { + "id": "pa9", + "target": "net:B1.PA9", + "kind": "digital" + }, + { + "id": "pa10", + "target": "net:B1.PA10", + "kind": "digital" + }, + { + "id": "pa11", + "target": "net:B1.PA11", + "kind": "digital" + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/tim_pwmoutput/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/tim_pwmoutput/scenario.json new file mode 100644 index 000000000..b57bdc61d --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/tim_pwmoutput/scenario.json @@ -0,0 +1,86 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "tim_pwmoutput", + "until": "100ms", + "description": "TIM_PWMOutput: TIM1 at 85 MHz (PSC from 170 MHz), ARR 999: four 85 kHz PWM channels, CH1 on PA8 at 50 %, CH2 on PA9 at 37.5 %, CH3 on PA10 at 25 %, CH4 on PA11 at 12.5 % (TIM1's MOE through BDTR).", + "inputs": [], + "assertions": [ + { + "id": "pa8-f", + "between": [ + "20ms", + "90ms" + ], + "probe": "pa8", + "expect": { + "frequency_hz": 85000 + }, + "tolerance": 0.01 + }, + { + "id": "pa11-f", + "between": [ + "20ms", + "90ms" + ], + "probe": "pa11", + "expect": { + "frequency_hz": 85000 + }, + "tolerance": 0.01 + }, + { + "id": "pa8-duty", + "between": [ + "20ms", + "90ms" + ], + "probe": "pa8", + "expect": { + "min": 0.495, + "max": 0.505 + }, + "measure": "duty_cycle" + }, + { + "id": "pa9-duty", + "between": [ + "20ms", + "90ms" + ], + "probe": "pa9", + "expect": { + "min": 0.37, + "max": 0.38 + }, + "measure": "duty_cycle" + }, + { + "id": "pa10-duty", + "between": [ + "20ms", + "90ms" + ], + "probe": "pa10", + "expect": { + "min": 0.245, + "max": 0.255 + }, + "measure": "duty_cycle" + }, + { + "id": "pa11-duty", + "between": [ + "20ms", + "90ms" + ], + "probe": "pa11", + "expect": { + "min": 0.12, + "max": 0.13 + }, + "measure": "duty_cycle" + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/uart_printf/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/uart_printf/scenario.json new file mode 100644 index 000000000..112821ed6 --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/uart_printf/scenario.json @@ -0,0 +1,37 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "uart_printf", + "until": "100ms", + "description": "UART_Printf: printf retargeted to LPUART1 (PA2/PA3), the STLINK-V3E's virtual COM port, at 115200 baud with 8 bits, odd parity (7 data bits and the parity bit).", + "inputs": [], + "assertions": [ + { + "id": "banner", + "at": "60ms", + "probe": "console", + "expect": { + "contains": "UART Printf Example: retarget the C library printf function to the UART" + } + }, + { + "id": "done", + "at": "95ms", + "probe": "console", + "expect": { + "contains": "** Test finished successfully. **" + } + }, + { + "id": "no-error", + "between": [ + "20ms", + "95ms" + ], + "probe": "led", + "expect": { + "logic": "0" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/wwdg_example/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/wwdg_example/scenario.json new file mode 100644 index 000000000..714f39e1e --- /dev/null +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/wwdg_example/scenario.json @@ -0,0 +1,47 @@ +{ + "schema_version": 1, + "kind": "scenario", + "name": "wwdg_example", + "until": "6s", + "description": "WWDG_Example: the WWDG at PCLK1 / 4096 / 128, counter 127 and window 80, refreshed in its window while LD2 toggles; B1's press makes the EXTI handler write to an invalid address, the hard fault's loop stops the refreshes and the WWDG resets the part as its counter passes 0x40, which then holds LD2 on for 4 s (RCC_CSR's WWDGRSTF).", + "inputs": [ + { + "at": "1500ms", + "target": "B1.B1", + "input": "pressed", + "value": true + }, + { + "at": "1600ms", + "target": "B1.B1", + "input": "pressed", + "value": false + } + ], + "assertions": [ + { + "id": "running", + "between": [ + "300ms", + "1.45s" + ], + "probe": "led", + "expect": { + "min": 0.3, + "max": 0.7 + }, + "measure": "duty_cycle" + }, + { + "id": "reset", + "between": [ + "2.2s", + "5.3s" + ], + "probe": "led", + "expect": { + "logic": "1" + } + } + ] +} diff --git a/tests/vendor/stm32cubeg4/run.py b/tests/vendor/stm32cubeg4/run.py new file mode 100644 index 000000000..444dec266 --- /dev/null +++ b/tests/vendor/stm32cubeg4/run.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2026 Junior Deogracias +"""STM32CubeG4's own examples for the NUCLEO-G474RE, built unmodified and +run on EmbSIM's board (01 §8.2). + +ST's files are not vendored. --cube names a checkout of STM32CubeG4 with +its submodules (Drivers/STM32G4xx_HAL_Driver, Drivers/CMSIS/Device/ST/ +STM32G4xx, Drivers/BSP/STM32G4xx_Nucleo; its Drivers/CMSIS/Include). +CI fetches it at the commit the workflow pins. + +Each example under nucleo_g474re/ is one of CubeG4's for the board (the +EXAMPLES table names its directory). It is built as its STM32CubeIDE +project builds it: +- the sources its .project links; +- the defines and include paths of its .cproject's Debug configuration, + at -Os; +- its own startup file, syscalls.c, sysmem.c and linker script + (STM32G474RETX_FLASH.ld); +- newlib-nano. +The image then runs nucleo_g474re/project.json (or /project.json) +under the example's scenario.json, whose assertions must all pass. + + run.py --cube DIR [--embsim PATH] [--keep DIR] [EXAMPLE...] + +Without arm-none-eabi-gcc, or without --cube (or STM32CUBE_G4), it skips.""" +import argparse +import os +import re +import shutil +import sys +import tempfile +from pathlib import Path + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[2] +sys.path.insert(0, str(HERE.parent)) +from vendor_run import run_scenario, sh # noqa: E402 + +NUCLEO = "Projects/NUCLEO-G474RE/" +EXAMPLES = { + "cortexm_modeprivilege": NUCLEO + "Examples/Cortex/CORTEXM_ModePrivilege", + "cortexm_processstack": NUCLEO + "Examples/Cortex/CORTEXM_ProcessStack", + "cortexm_systick": NUCLEO + "Examples/Cortex/CORTEXM_SysTick", + "crc_bytes_stream_7bit_crc": NUCLEO + "Examples/CRC/CRC_Bytes_Stream_7bit_CRC", + "crc_data_reversing_16bit_crc": NUCLEO + "Examples/CRC/CRC_Data_Reversing_16bit_CRC", + "crc_example": NUCLEO + "Examples/CRC/CRC_Example", + "crc_userdefinedpolynomial": NUCLEO + "Examples/CRC/CRC_UserDefinedPolynomial", + "flash_eraseprogram": NUCLEO + "Examples/FLASH/FLASH_EraseProgram", + "flash_fastprogram": NUCLEO + "Examples/FLASH/FLASH_FastProgram", + "gpio_exti": NUCLEO + "Examples/GPIO/GPIO_EXTI", + "gpio_iotoggle": NUCLEO + "Examples/GPIO/GPIO_IOToggle", + "hal_timebase_tim": NUCLEO + "Examples/HAL/HAL_TimeBase_TIM", + "iwdg_reset": NUCLEO + "Examples/IWDG/IWDG_Reset", + "iwdg_windowmode": NUCLEO + "Examples/IWDG/IWDG_WindowMode", + "pwr_stop0": NUCLEO + "Examples/PWR/PWR_STOP0", + "rcc_clockconfig": NUCLEO + "Examples/RCC/RCC_ClockConfig", + "tim_octoggle": NUCLEO + "Examples/TIM/TIM_OCToggle", + "tim_pwmoutput": NUCLEO + "Examples/TIM/TIM_PWMOutput", + "uart_printf": NUCLEO + "Examples/UART/UART_Printf", + "wwdg_example": NUCLEO + "Examples/WWDG/WWDG_Example", +} +BOARD_DIR = HERE / "nucleo_g474re" +LD = "STM32G474RETX_FLASH.ld" +MCU = ["-mcpu=cortex-m4", "-mfpu=fpv4-sp-d16", "-mfloat-abi=hard", "-mthumb"] +CFLAGS = ["-std=gnu11", "-g3", "-Os", "-ffunction-sections", "-fdata-sections", "-Wall", "--specs=nano.specs"] +LDFLAGS = ["--specs=nosys.specs", "--specs=nano.specs", "-Wl,--gc-sections", "-static", + "-Wl,--start-group", "-lc", "-lm", "-Wl,--end-group"] + + +def debug_config(cproject: str) -> str: + for m in re.finditer(r"", cproject, re.S): + if 'name="Debug"' in m.group(0): + return m.group(0) + raise SystemExit("no Debug configuration in .cproject") + + +def option_values(config: str, key: str) -> list: + out = [] + for m in re.finditer(r']*superClass="[^"]*c\.compiler\.option\.' + key + r'"[^>]*>(.*?)', + config, re.S): + out += re.findall(r' list: + """the .project's linked C and assembly sources (CubeG4 writes them as + ${PARENT-n-PROJECT_LOC}/..., URL-encoded), then the files the project + directory holds (its startup, syscalls.c, sysmem.c)""" + text = (ide / ".project").read_text(encoding="utf-8") + out = [] + for loc in re.findall(r"([^<]*)", text): + loc = loc.replace("$%7B", "").replace("%7D", "") + m = re.match(r"PARENT-(\d+)-PROJECT_LOC/(.*)", loc) + if not m: + continue + base = ide + for _ in range(int(m.group(1))): + base = base.parent + p = base / m.group(2) + if p.suffix in (".c", ".s"): + out.append(p) + for p in sorted(ide.rglob("*")): + if p.suffix in (".c", ".s") and p.is_file(): + out.append(p) + return out + + +def record(name: str) -> dict: + e = EXAMPLES[name] + return dict({"defines": [], "patches": {}}, **(e if isinstance(e, dict) else {"dir": e})) + + +def build(cube: Path, name: str, out: Path) -> Path: + rec = record(name) + ex = cube / rec["dir"] + ide = ex / "STM32CubeIDE" + config = debug_config((ide / ".cproject").read_text(encoding="utf-8")) + defs = ["-D" + d for d in option_values(config, "definedsymbols") + rec["defines"]] + incs = [] + for i in option_values(config, "includepaths"): + incs += ["-I", (ide / "Debug" / i).resolve()] # relative to the IDE's build directory + d = out / name + d.mkdir(parents=True, exist_ok=True) + objs = [] + for n, src in enumerate(project_sources(ide)): + o = d / f"{n:03d}_{src.stem}.o" + if src.suffix == ".s": + sh(["arm-none-eabi-gcc", "-x", "assembler-with-cpp", "-c", *MCU, "-g3", *defs, src, "-o", o]) + else: + sh(["arm-none-eabi-gcc", "-c", *MCU, *CFLAGS, *defs, *incs, src, "-o", o]) + objs.append(o) + elf = out / (name + ".elf") + sh(["arm-none-eabi-gcc", *objs, *MCU, "-T", ide / LD, *LDFLAGS, f"-Wl,-Map={out / (name + '.map')}", "-o", elf]) + return elf + + +def project_of(name: str) -> Path: + own = BOARD_DIR / name / "project.json" + return own if own.exists() else BOARD_DIR / "project.json" + + +def main() -> int: + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("--cube", default=os.environ.get("STM32CUBE_G4"), help="an STM32CubeG4 checkout with its submodules") + ap.add_argument("--embsim", default=str(ROOT / "build" / "dev" / "bin" / "embsim")) + ap.add_argument("--keep", help="build here, and keep it, instead of a temporary directory") + ap.add_argument("examples", nargs="*") + args = ap.parse_args() + if not shutil.which("arm-none-eabi-gcc") or not args.cube: + print(f"SKIP: {'needs arm-none-eabi-gcc' if args.cube else 'no --cube (an STM32CubeG4 checkout)'}") + return 0 + cube = Path(args.cube).resolve() + for need in (NUCLEO, "Drivers/STM32G4xx_HAL_Driver/Inc/stm32g4xx_hal.h", + "Drivers/CMSIS/Device/ST/STM32G4xx/Include/stm32g4xx.h", "Drivers/BSP/STM32G4xx_Nucleo/stm32g4xx_nucleo.h", + "Drivers/CMSIS/Include/core_cm4.h"): + if not (cube / need).exists(): + print(f"error: {cube} has no {need}") + return 2 + names = args.examples or sorted(d.name for d in BOARD_DIR.iterdir() if d.is_dir()) + with tempfile.TemporaryDirectory() as tmp: + work = Path(args.keep).resolve() if args.keep else Path(tmp) + work.mkdir(parents=True, exist_ok=True) + bad = 0 + for name in names: + elf = build(cube, name, work) + bad += not run_scenario(Path(args.embsim), project_of(name), name, elf, BOARD_DIR / name / "scenario.json", work) + return 1 if bad else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ui/apps/workbench/scripts/screenshots.mjs b/ui/apps/workbench/scripts/screenshots.mjs index 87832df26..073043894 100644 --- a/ui/apps/workbench/scripts/screenshots.mjs +++ b/ui/apps/workbench/scripts/screenshots.mjs @@ -98,6 +98,7 @@ const explorer24 = 'examples/explorer16-pic24/project.json'; const picoDual = 'examples/pico-dual-core/project.json'; const nucleo = 'examples/nucleo-f446re-blink-serial/project.json'; const nucleo144 = 'examples/nucleo-f446ze-blink-serial/project.json'; +const nucleoG4 = 'examples/nucleo-g474re-blink-serial/project.json'; const faulting = 'tests/firmware/fault/project.json'; /** the Debug perspective stopped at a breakpoint on `symbol` */ @@ -222,6 +223,18 @@ try { await perspective(page, 2); await run(page, 2700); }); + // the NUCLEO-G474RE (STM32G474RE, the Nucleo-64 MB1367): a second STM32 family + await shot(browser, 'design-nucleo-g474re', nucleoG4, async (page) => run(page, 1500)); + await shot(browser, 'run-nucleo-g474re', nucleoG4, async (page) => { + await perspective(page, 2); + await run(page, 2700); + }); + await shot(browser, 'board-nucleo-g474re', nucleoG4, async (page) => { + await page.getByRole('radio', { name: 'Bench' }).click(); + await wait(800); + await page.getByRole('radio', { name: '2D', exact: true }).click(); + await run(page, 2700); + }, { scale: 2, element: '.es-board' }); // M5: verification. A scenario opened, edited in place and run; coverage of // the Blue Pill's firmware with its source; a recording replayed const verifyRegion = (page, name) => page.getByRole('region', { name }); From 1afeea6846f049d55705e611870e93b6f35504c3 Mon Sep 17 00:00:00 2001 From: Junior Deogracias Date: Thu, 12 Nov 2026 22:43:40 +0100 Subject: [PATCH 05/10] STM32G4 PWR: the wake-up flag's shift in 64 bits (MSVC C4334) --- core/mcu/stm32/pwr_g4.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/mcu/stm32/pwr_g4.c b/core/mcu/stm32/pwr_g4.c index bbf5b94a5..b4d010883 100644 --- a/core/mcu/stm32/pwr_g4.c +++ b/core/mcu/stm32/pwr_g4.c @@ -221,7 +221,7 @@ void esk_stm32g4_pwr_pin_edge(struct esk_mach *m, int port, int pin, int level) if (!(w->cr3->value >> k & 1)) return; if (level == !((w->cr4->value >> k) & 1)) { /* WPx 0: rising; 1: falling */ - sr1_set(w, w->sr1->value | (1u << k)); + sr1_set(w, w->sr1->value | (u64)1u << k); if (w->mode == STANDBY || w->mode == SHUTDOWN) standby_ends(m); } From 60813b8fec06ba9520d5a01e61ffc9106d42f324 Mon Sep 17 00:00:00 2001 From: Junior Deogracias Date: Thu, 12 Nov 2026 22:43:40 +0100 Subject: [PATCH 06/10] Oscilloscope: no negative double cast to an unsigned time The filter's look-back took ti + (es_time_t)(tt * 1e12) with tt <= 0, undefined behaviour that clang's -fsanitize=undefined reports; it is ti - (es_time_t)(-tt * 1e12), the same sample times. --- core/analog/oscilloscope.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/analog/oscilloscope.c b/core/analog/oscilloscope.c index 006a0cf9e..0526c85e6 100644 --- a/core/analog/oscilloscope.c +++ b/core/analog/oscilloscope.c @@ -265,7 +265,7 @@ static void acquire(esk_adev *d, es_time_t t, int forced) } y = hist_v(s, k, ti - (es_time_t)(settle * 1e12)); for (tt = -settle + si; tt <= 1e-15; tt += si) - y += alpha * (hist_v(s, k, ti + (es_time_t)(tt * 1e12)) - y); + y += alpha * (hist_v(s, k, ti - (es_time_t)(-tt * 1e12)) - y); /* tt <= 0: not a negative double cast to unsigned */ s->acq[k][i] = (float)quantize(y, scale, offset, &code); } } From 3760863a83e8dedc5acced625fdbaf502b2c2392 Mon Sep 17 00:00:00 2001 From: Junior Deogracias Date: Thu, 12 Nov 2026 23:34:58 +0100 Subject: [PATCH 07/10] NUCLEO-G474RE and STM32G474RE checked against UM2505, DS12288 and RM0440 - The board as UM2505 Rev 7 gives it: U4 (STMPS2151STR) and LD4 in the STLINK-V3E's 5 V path, CN10 pins 35 and 37 on USART1 as the factory solder bridges leave them, VREF+ on its own net (CN5 pin 8, CN10 pin 7) through JP8 and the ferrite bead L2, VDDA through L1, the crystals' parts (NX2016SA 24 MHz, NX3215SA), DS12288's decoupling scheme. - DS12288 Rev 6: a fast-programmed row takes 1.91 ms; the PVD has its falling and rising thresholds; the start-up and flash times confirmed. - RM0440 Rev 9: the package code (LQFP64) in the engineering bytes; the reset values and EXTI's direct lines confirmed. - STM32CubeG4's examples: 20, as the suite holds them. --- CHANGELOG.md | 8 +- catalog/boards/nucleo_g474re/board.json | 255 ++++++++++++++---- catalog/mcus/st/stm32g474re/mcu.json | 25 +- core/mcu/stm32/flash_g4.c | 6 +- core/mcu/stm32/pwr_g4.c | 17 +- docs/STATUS.md | 15 +- docs/coverage.md | 2 +- .../flash_fastprogram/scenario.json | 10 +- 8 files changed, 259 insertions(+), 79 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb9e4e061..d95ac4301 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,12 +43,18 @@ versions follow semantic versioning. There is no release yet. NUCLEO-G474RE's option bytes), and an MCU model can choose the boot (`boot_pin`, `boot_system`: the G4's BOOT0 on PB8). - `tests/vendor/stm32cubeg4/run.py` builds STM32CubeG4's examples for the - NUCLEO-G474RE unmodified; 21 run under scenarios (GPIO, EXTI, the HAL's + NUCLEO-G474RE unmodified; 20 run under scenarios (GPIO, EXTI, the HAL's time base on TIM6, RCC's PLL moved between HSI16 and HSE, UART_Printf on LPUART1, four CRC examples, the Cortex-M4's privilege modes, process stack and SysTick, FLASH erase/program and fast program with their timing, the IWDG with and without a window, the WWDG, Stop 0, TIM1's PWM and output compare toggle), in CI's linux-gcc job too. +- The NUCLEO-G474RE checked against UM2505 Rev 7 and DS12288 Rev 6: U4 + (STMPS2151STR) and LD4 in the STLINK-V3E's 5 V path, CN10 pins 35 and 37 + on USART1 (the factory solder bridges), VREF+ on its own net through JP8 + and the ferrite bead L2 (VDDA through L1), the crystals' parts, the + datasheet's decoupling; the fast row's programming time is DS12288's + 1.91 ms and the PVD's thresholds its falling and rising ones. - Fixed: exception entry left CONTROL.SPSEL set when the thread ran on the process stack, so a handler read CONTROL[1] as 1 (ARMv7-M's ExceptionTaken clears it); CubeG4's CORTEXM_ProcessStack found it. diff --git a/catalog/boards/nucleo_g474re/board.json b/catalog/boards/nucleo_g474re/board.json index 0a1cd776a..729bccef7 100644 --- a/catalog/boards/nucleo_g474re/board.json +++ b/catalog/boards/nucleo_g474re/board.json @@ -55,7 +55,7 @@ "params": { "initially_closed": true }, - "doc": "JP5 (5V_SEL) on pins 1-2, STLK: the board runs from the STLINK-V3E's USB (the factory position)" + "doc": "JP5 (5V_SEL) on pins 1-2, STLK: the board runs from the STLINK-V3E's USB through U4 (the factory position)" }, { "id": "JP5_VIN", @@ -70,7 +70,7 @@ { "id": "JP5_CHGR", "component": "emblink/toggle_switch", - "doc": "JP5 on pins 7-8, CHGR: +5V straight from the STLINK-V3E's USB connector, for a USB charger (no enumeration, no current limit)" + "doc": "JP5 on pins 7-8, CHGR: +5V straight from the STLINK-V3E's USB connector (5V_USB_CHGR, also on CN10 pin 8), for a USB charger: no enumeration, no current limit" }, { "id": "U12", @@ -105,12 +105,123 @@ "doc": "LD3's series resistor (its value assumed: MB1367's schematic not at hand)" }, { - "id": "L1", + "id": "U4", + "component": "emblink/stmps2151str", + "doc": "U4 STMPS2151STR: the STLINK-V3E's 5 V (5V_USB_STLK) once its T_PWR_EN goes high after the USB enumeration (UM2505 7.4.1); its current limit protects the PC's port" + }, + { + "id": "R_TPWREN", + "component": "emblink/resistor", + "params": { + "resistance": 40 + }, + "doc": "The STLINK-V3E's T_PWR_EN driving U4's EN high, as after the host granted 500 mA (its pin's resistance assumed)" + }, + { + "id": "LD4", + "component": "emblink/led", + "params": { + "color": "red" + }, + "doc": "LD4 (red): U4's fault, more than 500 mA drawn from the STLINK-V3E's USB" + }, + { + "id": "R_LD4", "component": "emblink/resistor", "params": { - "resistance": 0.001 + "resistance": "1k" + }, + "doc": "LD4's series resistor (its value assumed)" + }, + { + "id": "L1", + "component": "emblink/ferrite_bead", + "doc": "L1, the ferrite bead from VDD to VDDA (SB8 off: not shunted; its part's values the catalog's default)" + }, + { + "id": "L2", + "component": "emblink/ferrite_bead", + "doc": "L2, the ferrite bead on VREF+'s supply (SB10 off: not shunted)" + }, + { + "id": "JP8_VDD", + "component": "emblink/toggle_switch", + "params": { + "initially_closed": true + }, + "doc": "JP8 (VREF+ selection) on pins 2-3: VREF+ from VDD. The board leaves the factory with JP8 on pins 1-2, VREF+ from a TL1431CL5T shunt reference at 3.25 V (R33 10 kOhm, R34 33 kOhm, SB14 off): not modelled yet (no shunt reference in the catalog), so VDD stands for it" + }, + { + "id": "C_VDD1", + "component": "emblink/capacitor", + "params": { + "capacitance": "100n" }, - "doc": "VDDA and VREF+ fed from VDD (the ferrite bead between them taken as a short)" + "doc": "VDD's decoupling at one of its four pins (DS12288 figure 16)" + }, + { + "id": "C_VDD2", + "component": "emblink/capacitor", + "params": { + "capacitance": "100n" + }, + "doc": "VDD's decoupling at one of its four pins (DS12288 figure 16)" + }, + { + "id": "C_VDD3", + "component": "emblink/capacitor", + "params": { + "capacitance": "100n" + }, + "doc": "VDD's decoupling at one of its four pins (DS12288 figure 16)" + }, + { + "id": "C_VDD4", + "component": "emblink/capacitor", + "params": { + "capacitance": "100n" + }, + "doc": "VDD's decoupling at one of its four pins (DS12288 figure 16)" + }, + { + "id": "C_VDD_BULK", + "component": "emblink/capacitor", + "params": { + "capacitance": "4.7u" + }, + "doc": "VDD's bulk capacitor (DS12288 figure 16)" + }, + { + "id": "C_VDDA1", + "component": "emblink/capacitor", + "params": { + "capacitance": "1u" + }, + "doc": "VDDA's 1 uF (DS12288 figure 16)" + }, + { + "id": "C_VDDA2", + "component": "emblink/capacitor", + "params": { + "capacitance": "10n" + }, + "doc": "VDDA's 10 nF (DS12288 figure 16)" + }, + { + "id": "C_VREF1", + "component": "emblink/capacitor", + "params": { + "capacitance": "1u" + }, + "doc": "VREF+'s 1 uF (DS12288 figure 16)" + }, + { + "id": "C_VREF2", + "component": "emblink/capacitor", + "params": { + "capacitance": "100n" + }, + "doc": "VREF+'s 100 nF (DS12288 figure 16)" }, { "id": "LD2", @@ -118,7 +229,7 @@ "params": { "color": "green" }, - "doc": "LD2 (USER, green): PA5 (Arduino D13) high lights it" + "doc": "LD2 (USER, green): PA5 (Arduino D13, SB6 on) high lights it; on the board through a transistor, here driven by PA5 itself" }, { "id": "R_LD2", @@ -168,7 +279,7 @@ "params": { "capacitance": "100n" }, - "doc": "NRST's capacitor: with the STM32's internal pull-up, it holds the part in reset at power-on" + "doc": "The 100 nF on PG10-NRST (SB1 on): with the STM32's internal pull-up, it holds the part in reset at power-on" }, { "id": "JP7", @@ -193,7 +304,7 @@ "lm": "7.8k", "rm": "50k" }, - "doc": "X2, the 32.768 kHz LSE crystal on PC14/PC15 (its part's motional values assumed)" + "doc": "X2 NX3215SA-32.768kHz-EXS00A-MU00525 (6 pF load, 20 ppm) on PC14/PC15 (SB30, SB31 on); its motional values assumed" }, { "id": "X3", @@ -201,7 +312,7 @@ "params": { "hz": "24meg" }, - "doc": "X3, the 24 MHz HSE crystal on PF0/PF1 (OSC_IN/OSC_OUT)" + "doc": "X3 NX2016SA-24MHz-EXS00A-CS10820 (6 pF load, 20 ppm) on PF0/PF1 (SB25, SB26 on), with C56 and C59 6.8 pF" }, { "id": "CN6", @@ -272,10 +383,28 @@ ], "U5V": [ "CN1.1", - "JP5_STLK.1", + "U4.IN", + "R_TPWREN.1", + "R_LD4.1", "JP5_CHGR.1", "CN10.8" ], + "T_PWR_EN": [ + "U4.EN", + "R_TPWREN.2" + ], + "5V_USB_STLK": [ + "U4.OUT", + "JP5_STLK.1" + ], + "LD4_A": [ + "R_LD4.2", + "LD4.A" + ], + "USB_OC": [ + "LD4.K", + "U4.FAULT" + ], "E5V": [ "JP5_E5V.1", "CN7.6" @@ -309,16 +438,43 @@ "R_PC13.1", "CN7.5", "CN7.33", - "L1.1" + "L1.1", + "JP8_VDD.1", + "C_VDD1.1", + "C_VDD2.1", + "C_VDD3.1", + "C_VDD4.1", + "C_VDD_BULK.1" ], "AVDD": [ "U1.VDDA", + "L1.2", + "C_VDDA1.1", + "C_VDDA2.1" + ], + "VREF_SEL": [ + "JP8_VDD.2", + "L2.1" + ], + "VREFP": [ "U1.VREFP", + "L2.2", "CN5.8", "CN10.7", - "L1.2" + "C_VREF1.1", + "C_VREF2.1" ], "GND": [ + "C_VDD1.2", + "C_VDD2.2", + "C_VDD3.2", + "C_VDD4.2", + "C_VDD_BULK.2", + "C_VDDA1.2", + "C_VDDA2.2", + "C_VREF1.2", + "C_VREF2.2", + "U4.GND", "U11.GND", "U12.GND", "LD3.K", @@ -386,12 +542,14 @@ "PC5": [ "U1.PC5", "CN9.1", - "CN10.6" + "CN10.6", + "CN10.37" ], "PC4": [ "U1.PC4", "CN9.2", - "CN10.34" + "CN10.34", + "CN10.35" ], "PA10": [ "U1.PA10", @@ -591,19 +749,17 @@ "U1.PB13", "CN10.30" ], - "PA2": [ - "U1.PA2", - "CN10.35" - ], - "PA3": [ - "U1.PA3", - "CN10.37" - ], "CN7_25_NC": [ "CN7.25" ], "CN7_27_NC": [ "CN7.27" + ], + "PA2": [ + "U1.PA2" + ], + "PA3": [ + "U1.PA3" ] }, "ports": { @@ -698,10 +854,10 @@ "pin": 7 }, "AREF": { - "net": "AVDD", + "net": "VREFP", "connector": "CN5", "pin": 8, - "doc": "AVDD (VDDA and VREF+)" + "doc": "VREFP, the STM32's VREF+ (JP8 chooses its source)" }, "IOREF": { "net": "3V3", @@ -966,7 +1122,7 @@ "pin": 6 }, "CN10_7": { - "net": "AVDD", + "net": "VREFP", "connector": "CN10", "pin": 7 }, @@ -1101,16 +1257,16 @@ "pin": 34 }, "CN10_35": { - "net": "PA2", + "net": "PC4", "connector": "CN10", "pin": 35, - "doc": "PA2, LPUART1_TX: the STLINK-V3E's virtual COM port" + "doc": "PC4, USART1_TX, as Arduino D1 (SB13 on); PA2 (LPUART1_TX) with SB18 on instead" }, "CN10_37": { - "net": "PA3", + "net": "PC5", "connector": "CN10", "pin": 37, - "doc": "PA3, LPUART1_RX: the STLINK-V3E's virtual COM port" + "doc": "PC5, USART1_RX, as Arduino D0 (SB19 on); PA3 (LPUART1_RX) with SB22 on instead" }, "U5V": { "net": "U5V", @@ -1682,7 +1838,7 @@ "omissions": [ "the STLINK-V3E itself: its USB enumeration (0483:374E), the mass-storage drag-and-drop programming, SWD and its NRST drive, LD1 (COM); the session programs and debugs the board (ADR-031)", "the VCP's bytes reach LPUART1 directly, not as frames on PA3", - "the solder bridges are fixed in a default state: PC14/PC15 and PF0/PF1 on the crystals, not on the morpho headers; the rest as UM2505's tables give them, which were not at hand: CN7's and CN10's assignment follows Zephyr's board files", + "the 41 solder bridges are fixed in their factory state as UM2505's table 12 gives them (PA2/PA3 on the VCP, PC4/PC5 on D1/D0 and CN10 pins 35 and 37, PB8 on D15 and CN7 pin 7, B1 on PC13, the crystals on PF0/PF1 and PC14/PC15 and not on the morpho headers)", "a single JP5 shunt sits on one position only; the four switches here can all be closed", "ST's BSP (stm32g4xx_nucleo.c) configures B1 as a rising edge with a pull-down; on this board (an external pull-up, a press pulling PC13 low) that BSP sees a press when B1 is released, as it would on the bench" ], @@ -1700,13 +1856,14 @@ ] }, "electrical": { - "claims": "The power paths of UM2505 6.4: the STLINK-V3E's USB 5 V (U5V) through JP5 pins 1-2 to +5V; VIN (7 to 12 V) through U11 (LD1117S50) and JP5 pins 3-4; E5V through pins 5-6; the USB charger position (pins 7-8) from CN1's VBUS; U12 (LD39050PU33R) makes +3.3V and JP6 (IDD) carries it to VDD, VBAT and VDDA/VREF+. LD3 shows +5V, LD2 is lit by PA5, a 4.7 kOhm pull-up holds PC13 high and B1 pulls it to ground through 100 ohm with a 100 nF capacitor on PC13, C_NRST holds NRST low at power-on against the STM32's pull-up; X3 and X2 are crystals' equivalent circuits.", + "claims": "The power paths of UM2505 7.4: the STLINK-V3E's USB 5 V (U5V) through U4 (STMPS2151STR, enabled by T_PWR_EN as after the enumeration; LD4 on its fault output) and JP5 pins 1-2 to +5V; VIN (7 to 12 V) through U11 (LD1117S50) and JP5 pins 3-4; E5V through pins 5-6; the USB charger position (pins 7-8) from CN1's VBUS directly; U12 (LD39050PU33R) makes +3.3V and JP6 (IDD) carries it to VDD and VBAT, VDDA through the ferrite bead L1 and VREF+ through JP8 and the ferrite bead L2. LD3 shows +5V, LD2 is lit by PA5, a pull-up holds PC13 high and B1 pulls it to ground with a capacitor on PC13, the 100 nF on NRST holds it low at power-on against the STM32's pull-up; X3 (NX2016SA 24 MHz) and X2 (NX3215SA 32.768 kHz) are crystals' equivalent circuits.", "omissions": [ - "MB1367's schematic was not at hand: the LED resistors, B1's network, C_NRST and JP7's pull-down are the Nucleo-64 boards' usual values, assumed; designators other than UM2505's (U11, U12, JP5, JP6, JP7, LD1-LD3, B1, B2, X2, X3, CN1, CN5-CN10) are EmbSIM's", - "the STLINK-V3E's power switch and current negotiation between its USB VBUS and JP5's STLK position (taken as closed), its own supply and current", - "decoupling and bulk capacitors, ESD protection", - "the STM32's supply current: VDD carries only what the pins drive", - "the ferrite bead between VDD and VDDA is taken as a short" + "MB1367's schematic was not at hand: the LED resistors, B1's network, JP7's pull-down, T_PWR_EN's drive and the ferrite beads' values are assumed; designators other than UM2505's (U4, U11, U12, JP5-JP8, LD1-LD4, L1, L2, B1, B2, X2, X3, CN1, CN5-CN10) are EmbSIM's", + "JP8's factory position (1-2): VREF+ from a TL1431CL5T shunt reference at 3.25 V; the catalog has no shunt reference yet, so JP8 stands on 2-3 (VDD)", + "LD2's transistor driver: PA5 drives LD2 through its resistor itself, so LD2's current flows through VDD (and JP6's ammeter), which on the board it does not", + "U4's current negotiation with the host (100 mA before the enumeration, 500 mA after it), the STLINK-V3E's own supply and current", + "the decoupling is DS12288's recommended scheme (figure 16: 100 nF per VDD pin and 4.7 uF, 10 nF and 1 uF on VDDA, 100 nF and 1 uF on VREF+), not checked against MB1367's own capacitors; ESD protection", + "the STM32's supply current: VDD carries only what the pins drive" ], "validation": [ "tests/*.json" @@ -1718,17 +1875,18 @@ "license": "Apache-2.0", "sources": [ { - "title": "UM2505 STM32G4 Nucleo-64 boards (MB1367) user manual: JP5's positions, JP6, the regulators U11 and U12, LD1-LD3, as its search excerpts give them", + "title": "UM2505 STM32G4 Nucleo-64 boards (MB1367) user manual", + "rev": "7", "url": "https://www.st.com/resource/en/user_manual/um2505-stm32g4-nucleo64-boards-mb1367-stmicroelectronics.pdf" }, - { - "title": "Zephyr's nucleo_g474re board files (Apache-2.0): the LEDs, B1, the console, the Arduino and morpho connectors' pin assignment" - }, { "title": "STM32CubeG4's NUCLEO-G474RE projects (BSD-3-Clause): HSE_VALUE 24 MHz, LPUART1 on PA2/PA3 (AF12) as the VCP, B1's falling edge (GPIO_EXTI, EXTI_ToggleLedOnIT)" }, { "title": "ST community, 'NUCLEO-G474RE: what is the intended use of JP7' (2019): the board ships with nSWBOOT0 0, PB8 an ordinary I/O; JP7 pulls BOOT0/PB8 down" + }, + { + "title": "Zephyr's nucleo_g474re board files (Apache-2.0), against which the connectors' assignment was checked" } ], "notes": "Artwork is an original SVG drawn for EmbSIM to the Nucleo-64's 70 x 82.5 mm outline; no ST artwork or logo is used." @@ -1738,7 +1896,7 @@ ], "i18n": { "fr": { - "source": "a18d33293d3f", + "source": "5f7a554a8554", "description": "La NUCLEO-G474RE de ST (MB1367) : un STM32G474RET6 avec le quartz HSE X3 de 24 MHz et le quartz LSE X2 de 32,768 kHz, la LED utilisateur verte LD2 sur PA5, le bouton bleu USER sur PC13, le bouton noir RESET, la LED d'alimentation verte LD3, JP5 choisissant l'USB du STLINK-V3E, VIN, E5V ou un chargeur USB, JP6 (IDD) pour mesurer le courant du MCU, les connecteurs Arduino Uno V3 et les deux connecteurs morpho ST. Le port COM virtuel du STLINK-V3E est la console série de la session sur le LPUART1 (PA2/PA3), et un port série sur l'hôte (embsim serve --serial).", "fidelity": { "functional": { @@ -1746,7 +1904,7 @@ "omissions": [ "le STLINK-V3E lui-même : son énumération USB (0483:374E), la programmation par glisser-déposer sur stockage de masse, le SWD et sa commande de NRST, LD1 (COM) ; la session programme et débogue la carte (ADR-031)", "les octets du VCP arrivent directement au LPUART1, pas comme des trames sur PA3", - "les ponts de soudure sont figés dans un état par défaut : PC14/PC15 et PF0/PF1 sur les quartz, pas sur les connecteurs morpho ; les autres tels que les tables de l'UM2505 les donnent, qui n'étaient pas sous la main : l'affectation de CN7 et CN10 suit les fichiers de carte de Zephyr", + "les 41 ponts de soudure sont figés dans leur état d'usine tel que le donne la table 12 de l'UM2505 (PA2/PA3 sur le VCP, PC4/PC5 sur D1/D0 et les broches 35 et 37 de CN10, PB8 sur D15 et la broche 7 de CN7, B1 sur PC13, les quartz sur PF0/PF1 et PC14/PC15 et pas sur les connecteurs morpho)", "un seul cavalier JP5 ne tient que sur une position ; les quatre interrupteurs ici peuvent tous être fermés", "la BSP de ST (stm32g4xx_nucleo.c) configure B1 sur un front montant avec un tirage vers le bas ; sur cette carte (un tirage externe vers le haut, un appui tirant PC13 au niveau bas) cette BSP voit l'appui au relâchement de B1, comme elle le ferait sur le banc" ] @@ -1758,13 +1916,14 @@ ] }, "electrical": { - "claims": "Les chemins d'alimentation de l'UM2505 6.4 : le 5 V de l'USB du STLINK-V3E (U5V) par les broches 1-2 de JP5 vers +5V ; VIN (7 à 12 V) par U11 (LD1117S50) et les broches 3-4 de JP5 ; E5V par les broches 5-6 ; la position chargeur USB (broches 7-8) depuis le VBUS de CN1 ; U12 (LD39050PU33R) fait le +3,3V et JP6 (IDD) le porte vers VDD, VBAT et VDDA/VREF+. LD3 indique le +5V, LD2 est allumée par PA5, un tirage de 4,7 kOhm tient PC13 au niveau haut et B1 le tire à la masse à travers 100 ohms avec un condensateur de 100 nF sur PC13, C_NRST tient NRST bas à la mise sous tension face au tirage interne du STM32 ; X3 et X2 sont les circuits équivalents de quartz.", + "claims": "Les chemins d'alimentation de l'UM2505 7.4 : le 5 V de l'USB du STLINK-V3E (U5V) par U4 (STMPS2151STR, activé par T_PWR_EN comme après l'énumération ; LD4 sur sa sortie de défaut) et les broches 1-2 de JP5 vers +5V ; VIN (7 à 12 V) par U11 (LD1117S50) et les broches 3-4 de JP5 ; E5V par les broches 5-6 ; la position chargeur USB (broches 7-8) directement depuis le VBUS de CN1 ; U12 (LD39050PU33R) fait le +3,3V et JP6 (IDD) le porte vers VDD et VBAT, vers VDDA par la ferrite L1 et vers VREF+ par JP8 et la ferrite L2. LD3 indique le +5V, LD2 est allumée par PA5, un tirage vers le haut tient PC13 au niveau haut et B1 le tire à la masse avec un condensateur sur PC13, les 100 nF sur NRST le tiennent bas à la mise sous tension face au tirage interne du STM32 ; X3 (NX2016SA 24 MHz) et X2 (NX3215SA 32,768 kHz) sont les circuits équivalents de quartz.", "omissions": [ - "le schéma de la MB1367 n'était pas sous la main : les résistances des LED, le réseau de B1, C_NRST et le tirage de JP7 sont les valeurs habituelles des cartes Nucleo-64, supposées ; les repères autres que ceux de l'UM2505 (U11, U12, JP5, JP6, JP7, LD1-LD3, B1, B2, X2, X3, CN1, CN5-CN10) sont ceux d'EmbSIM", - "l'interrupteur d'alimentation et la négociation de courant du STLINK-V3E entre le VBUS de son USB et la position STLK de JP5 (pris comme fermé), sa propre alimentation et son courant", - "les condensateurs de découplage et de réservoir, la protection ESD", - "le courant d'alimentation du STM32 : VDD ne porte que ce que pilotent les broches", - "la ferrite entre VDD et VDDA est prise comme un court-circuit" + "le schéma de la MB1367 n'était pas sous la main : les résistances des LED, le réseau de B1, le tirage de JP7, la commande de T_PWR_EN et les valeurs des ferrites sont supposés ; les repères autres que ceux de l'UM2505 (U4, U11, U12, JP5-JP8, LD1-LD4, L1, L2, B1, B2, X2, X3, CN1, CN5-CN10) sont ceux d'EmbSIM", + "la position d'usine de JP8 (1-2) : VREF+ fourni par une référence shunt TL1431CL5T à 3,25 V ; le catalogue n'a pas encore de référence shunt, JP8 est donc sur 2-3 (VDD)", + "le transistor qui pilote LD2 : PA5 pilote LD2 lui-même à travers sa résistance, si bien que le courant de LD2 passe par VDD (et l'ampèremètre de JP6), ce qui n'est pas le cas sur la carte", + "la négociation de courant d'U4 avec l'hôte (100 mA avant l'énumération, 500 mA après), la propre alimentation du STLINK-V3E et son courant", + "le découplage suit le schéma recommandé du DS12288 (figure 16 : 100 nF par broche VDD et 4,7 µF, 10 nF et 1 µF sur VDDA, 100 nF et 1 µF sur VREF+), non vérifié sur les condensateurs propres à la MB1367 ; la protection ESD", + "le courant d'alimentation du STM32 : VDD ne porte que ce que pilotent les broches" ] } } diff --git a/catalog/mcus/st/stm32g474re/mcu.json b/catalog/mcus/st/stm32g474re/mcu.json index 0cba7f9ba..1bdb4abc3 100644 --- a/catalog/mcus/st/stm32g474re/mcu.json +++ b/catalog/mcus/st/stm32g474re/mcu.json @@ -430,6 +430,11 @@ "erased": "0xFFFFFFFF", "doc": "The engineering bytes (RM0440 48): the unique device ID, the flash size and the factory calibration values (DS12288 5.3.4, 5.3.25). Each real part has its own; these are one part's, with the datasheet's typical values: VREFINT 1.212 V and the temperature sensor's 0.76 V at 30 degC, 2.5 mV/degC, read at VREF+ 3.0 V", "contents": [ + { + "offset": "0x00", + "bytes": "e0ff", + "doc": "PKG[4:0] 00000: LQFP64 (RM0440 48.3); the reserved bits as erased" + }, { "offset": "0x90", "bytes": "35002100474d495331424d45", @@ -2177,14 +2182,14 @@ "omissions": [ "the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, DMA1, DMA2 and DMAMUX, the I2Cs and SPIs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC", "the timers' G4 additions: OCxM's fourth bit (retriggerable one-pulse, combined and asymmetric PWM), SMS's fourth bit (combined reset and trigger, the extended encoder modes), the internal trigger inputs ITR4 to ITR10 and TS's fifth bit, MMS's fourth bit, channels 5 and 6, dithering (DITHEN: ARR and CCRx read as their 16 integer bits), UIFREMAP, the encoder index (ECR), the asymmetric dead times (DTR2), break 2, the comparators on TISEL and AF1/AF2's break sources, the G4's ITR interconnection table (the F4's is used)", - "the start-up times, flash times and PVD thresholds are DS12288's typical values as transcribed without the datasheet at hand (HSI16 0.8 us, an HSE crystal 2 ms, LSI 80 us, LSE 2 s, HSI48 2.5 us, the PLL's lock 15 us; a double word 81.7 us, a fast row 2.61 ms, a page erase 22.02 ms, a bank erase 22.13 ms; the PVD at 2.0 to 2.9 V), and their spread and dependence on temperature are not modelled", + "the start-up times, flash times and PVD thresholds are DS12288 Rev 6's typical values (HSI16 0.8 us, an HSE crystal 2 ms, LSI 80 us, LSE 2 s, HSI48 2.5 us, the PLL's lock 15 us; a double word 81.7 us, a fast row 1.91 ms, a page erase 22.02 ms, a bank erase 22.13 ms; the PVD's thresholds), not their spread between parts or their dependence on temperature", "RCC: the clock security systems (CSSON, LSECSSON: the oscillators never fail), LSEDRV, HSITRIM and HSI48CAL's effect on the frequencies, the CRS's trimming, a peripheral held in reset while its *RSTR bit stays set, the brownout reset (BORRSTF only at power-on), the sleep-mode enables (*SMENR), MCO and LSCO on their pins", "PWR: the regulator's settling (VOSF never set) and the wake-up times, the supply currents, the PVMs (VDDA is VDD), UCPD's dead-battery bits, VBAT charging", "FLASH: the option bytes' programming time, the read protection's levels and their mass erase, PCROP and the securable area, ECC, the bank swap (BFB2, FB_MODE), the boot from SRAM, the power-down modes, the caches' real line length", "USART: noise detection (NE never sets, ONEBIT does nothing), auto baud rate detection, TXINV and RXINV, DE's assertion and deassertion times (DEAT, DEDT), the synchronous slave, smartcard and IrDA modes, TCBGT", "SYSCFG: SWPR's write protection of the CCM SRAM, its erase time, the parity errors CFGR2 reports; EXTI: the internal lines' sources but PVD's; GPIO: EVENTOUT, the I/O compensation, the 5 V tolerant pins' clamps", - "the electrical I/O values (io.electrical) are the F446's and DS12288's typical ones, not checked against the datasheet's tables; the package code at 0x1FFF7500 reads erased", - "DBGMCU's REV_ID 0x2001 (the silicon revision is assumed); a halted core draws its sleep current" + "the I/O thresholds are DS12288's typical characteristics (0.39 x VDD - 0.06 and 0.49 x VDD + 0.26, 200 mV of hysteresis, 40 kOhm pulls), not the guaranteed 0.3 and 0.7 x VDD; the output resistances and edge rates are the F446's", + "DBGMCU's REV_ID 0x2001 (revision Z: which revision a board carries varies, UM2505 10.1); a halted core draws its sleep current" ], "validation": [ "repo:tests/unit/test_stm32g4.c", @@ -2207,10 +2212,12 @@ "license": "Apache-2.0", "sources": [ { - "title": "RM0440 Reference manual: STM32G4 Series advanced Arm-based 32-bit MCUs" + "title": "RM0440 Reference manual: STM32G4 Series advanced Arm-based 32-bit MCUs", + "rev": "9" }, { - "title": "STM32G474xB/xC/xE datasheet (DS12288)" + "title": "STM32G474xB/xC/xE datasheet (DS12288)", + "rev": "6" }, { "title": "PM0214 Programming manual: STM32 Cortex-M4 MCUs and MPUs" @@ -2228,7 +2235,7 @@ }, "i18n": { "fr": { - "source": "5aa1acd3852d", + "source": "02c6b848b5e0", "description": "STMicroelectronics STM32G474RE : un Arm Cortex-M4F jusqu'à 170 MHz avec MPU, 512 Kio de flash à double banc, 128 Kio de SRAM (80 Kio de SRAM1, 16 Kio de SRAM2, 32 Kio de CCM SRAM), ses accélérateurs mathématiques, son timer haute résolution et sa chaîne analogique, en LQFP64 ; le MCU de la NUCLEO-G474RE.", "fidelity": { "functional": { @@ -2236,14 +2243,14 @@ "omissions": [ "les périphériques que coverage.md indique manquants gardent leurs valeurs de registre et lèvent mcu.unsupported_access : les ADC, DAC, comparateurs, amplis op et VREFBUF, DMA1, DMA2 et le DMAMUX, les I2C et SPI, RTC et TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, les FDCAN, l'USB, l'UCPD, le HRTIM, le QUADSPI, le SAI et le FMC", "les ajouts G4 des timers : le quatrième bit d'OCxM (one-pulse redéclenchable, PWM combinée et asymétrique), le quatrième bit de SMS (reset et déclenchement combinés, les modes codeur étendus), les entrées de déclenchement internes ITR4 à ITR10 et le cinquième bit de TS, le quatrième bit de MMS, les canaux 5 et 6, le dithering (DITHEN : ARR et CCRx lus comme leurs 16 bits entiers), UIFREMAP, l'index du codeur (ECR), les temps morts asymétriques (DTR2), le break 2, les comparateurs sur TISEL et les sources de break d'AF1/AF2, la table d'interconnexion ITR du G4 (celle du F4 est utilisée)", - "les temps de démarrage, les temps de la flash et les seuils du PVD sont les valeurs typiques du DS12288 transcrites sans la fiche technique sous la main (HSI16 0,8 µs, un quartz HSE 2 ms, LSI 80 µs, LSE 2 s, HSI48 2,5 µs, le verrouillage de la PLL 15 µs ; un double mot 81,7 µs, une rangée rapide 2,61 ms, l'effacement d'une page 22,02 ms, celui d'un banc 22,13 ms ; le PVD de 2,0 à 2,9 V), et leur dispersion et leur dépendance à la température ne sont pas modélisées", + "les temps de démarrage, les temps de la flash et les seuils du PVD sont les valeurs typiques du DS12288 Rev 6 (HSI16 0,8 µs, un quartz HSE 2 ms, LSI 80 µs, LSE 2 s, HSI48 2,5 µs, le verrouillage de la PLL 15 µs ; un double mot 81,7 µs, une rangée rapide 1,91 ms, l'effacement d'une page 22,02 ms, celui d'un banc 22,13 ms ; les seuils du PVD), pas leur dispersion d'une puce à l'autre ni leur dépendance à la température", "RCC : les systèmes de sécurité d'horloge (CSSON, LSECSSON : les oscillateurs ne tombent jamais en panne), LSEDRV, l'effet de HSITRIM et HSI48CAL sur les fréquences, l'ajustement par le CRS, un périphérique maintenu en reset tant que son bit *RSTR reste à 1, le reset de brownout (BORRSTF seulement à la mise sous tension), les activations du mode sommeil (*SMENR), MCO et LSCO sur leurs broches", "PWR : l'établissement du régulateur (VOSF jamais à 1) et les temps de réveil, les courants d'alimentation, les PVM (VDDA vaut VDD), les bits de batterie morte de l'UCPD, la charge de VBAT", "FLASH : le temps de programmation des octets d'option, les niveaux de protection en lecture et leur effacement total, le PCROP et la zone sécurisable, l'ECC, l'échange de bancs (BFB2, FB_MODE), le démarrage depuis la SRAM, les modes basse consommation, la vraie longueur de ligne des caches", "USART : la détection de bruit (NE jamais à 1, ONEBIT sans effet), la détection automatique du débit, TXINV et RXINV, les temps d'assertion et de désassertion de DE (DEAT, DEDT), l'esclave synchrone, les modes carte à puce et IrDA, TCBGT", "SYSCFG : la protection en écriture des pages de la CCM SRAM par SWPR, le temps de son effacement, les erreurs de parité que signale CFGR2 ; EXTI : les sources des lignes internes sauf celle du PVD ; GPIO : EVENTOUT, la cellule de compensation, les écrêtages des broches tolérantes au 5 V", - "les valeurs électriques des E/S (io.electrical) sont celles du F446 et les valeurs typiques du DS12288, non vérifiées sur les tables de la fiche technique ; le code de boîtier à 0x1FFF7500 se lit effacé", - "le REV_ID 0x2001 du DBGMCU (la révision du silicium est supposée) ; un cœur arrêté consomme son courant de sommeil" + "les seuils des E/S sont les caractéristiques typiques du DS12288 (0,39 x VDD - 0,06 et 0,49 x VDD + 0,26, 200 mV d'hystérésis, tirages de 40 kOhm), pas les 0,3 et 0,7 x VDD garantis ; les résistances de sortie et les vitesses de front sont celles du F446", + "le REV_ID 0x2001 du DBGMCU (révision Z : la révision que porte une carte varie, UM2505 10.1) ; un cœur arrêté consomme son courant de sommeil" ] }, "timed": { diff --git a/core/mcu/stm32/flash_g4.c b/core/mcu/stm32/flash_g4.c index a07365d1f..4641495f1 100644 --- a/core/mcu/stm32/flash_g4.c +++ b/core/mcu/stm32/flash_g4.c @@ -30,7 +30,7 @@ * running from the other bank, or from SRAM, goes on and polls BSY; a * store to the flash while BSY is set waits for it; * - timing: BSY for DS12288's typical times: a double word 81.7 us, a - * fast-programmed row 2.61 ms, a page's erase 22.02 ms, a bank's 22.13 + * fast-programmed row 1.91 ms, a page's erase 22.02 ms, a bank's 22.13 * ms; EOP at their end; * - the option bytes: OPTKEYR's keys (0x08192A3B, 0x4C5D6E7F) clear CR's * OPTLOCK; OPTSTRT writes OPTR, PCROP1SR/ER, WRP1AR/BR, SEC1R to bank @@ -117,10 +117,10 @@ #define DLINES 8 #define NO_LINE 0xFFFFFFFFu -/* DS12288's typical programming times (its flash memory characteristics) */ +/* DS12288 Rev 6's typical programming times (table 47) */ #define PS_US 1000000ull #define PROGRAM_PS (81700000ull) -#define ROW_PS (2610ull * PS_US) +#define ROW_PS (1910ull * PS_US) #define PAGE_ERASE_PS (22020ull * PS_US) #define BANK_ERASE_PS (22130ull * PS_US) diff --git a/core/mcu/stm32/pwr_g4.c b/core/mcu/stm32/pwr_g4.c index b4d010883..5fffa62d9 100644 --- a/core/mcu/stm32/pwr_g4.c +++ b/core/mcu/stm32/pwr_g4.c @@ -10,8 +10,9 @@ * - low-power run: CR1.LPR puts the regulator in low-power mode, SR2's * REGLPF follows it; REGLPS reads 1 (the low-power regulator ready); * - the programmable voltage detector: with CR2.PVDE, SR2.PVDO is 1 while - * VDD is below the threshold PLS selects (2.0 to 2.9 V), or with PLS - * 111 while PVD_IN (PB7) is below VREFINT (1.212 V); its changes are + * VDD is below the threshold PLS selects (DS12288's: falling 2.05 to + * 2.90 V, rising about 100 mV higher), or with PLS 111 while PVD_IN + * (PB7) is below VREFINT (1.212 V); its changes are * EXTI line 16's input; the peripheral voltage monitors' outputs * (PVMOx) read 0, VDDA being at VDD; * - DBP (CR1) allows writes to the backup domain (RCC's BDCR, rcc_g4.c); @@ -43,9 +44,8 @@ * times (the core runs at the wake-up event), the low-power run and Stop * modes' supply currents, the PVD's hysteresis and the PVMs' thresholds * (VDDA is VDD here), the USB Type-C dead-battery bits (UCPD1_DBDIS, - * UCPD1_STDBY), VBAT charging (CR4.VBE, VBRS), the PVD thresholds as - * DS12288 gives them per part (their typical values here: 2.0, 2.2, 2.4, - * 2.5, 2.6, 2.8, 2.9 V). */ + * UCPD1_STDBY), VBAT charging (CR4.VBE, VBRS), the PVD thresholds' spread + * between parts (the typical values here). */ #include "mcu/stm32/stm32.h" #define CR1_LPMS 7u @@ -116,7 +116,10 @@ static int pin_volts(struct esk_mach *m, int port, int bit, double *v) static void pvd(struct g4pwr *w) { - static const double th[7] = { 2.0, 2.2, 2.4, 2.5, 2.6, 2.8, 2.9 }; + /* DS12288 Rev 6 table 19's typical thresholds: PVDO rises as VDD falls + * below the falling one and clears once VDD rises above the rising one */ + static const double fall[7] = { 2.05, 2.20, 2.36, 2.52, 2.64, 2.81, 2.90 }; + static const double rise[7] = { 2.15, 2.31, 2.46, 2.61, 2.74, 2.91, 2.98 }; struct esk_mach *m = w->s; u32 cr2 = (u32)w->cr2->value, pls = cr2 >> 1 & 7; int o = 0; @@ -124,7 +127,7 @@ static void pvd(struct g4pwr *w) if (cr2 & CR2_PVDE) { double vdd = m->vdd > 0.0 ? m->vdd : 3.3, in; if (pls < 7) - o = vdd < th[pls]; + o = vdd < (w->pvdo ? rise[pls] : fall[pls]); else o = pin_volts(m, 1, 7, &in) && in < 1.212; } diff --git a/docs/STATUS.md b/docs/STATUS.md index c58508491..e28bbcd21 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -33,7 +33,7 @@ Evidence: handler; - the board's six fixtures (USB, VIN, E5V, VIN without JP5, the IDD ammeter, B1); -- 21 of STM32CubeG4's NUCLEO-G474RE examples built unmodified +- 20 of STM32CubeG4's NUCLEO-G474RE examples built unmodified (`tests/vendor/stm32cubeg4/run.py`, also in CI): GPIO_IOToggle, GPIO_EXTI, HAL_TimeBase_TIM, RCC_ClockConfig (the PLL moved between HSI16 and the crystal on B1), UART_Printf, the four CRC examples, @@ -50,12 +50,17 @@ the G474's 512 KiB flash alias: the store sets PGSERR without a fault, so on this part the example's IWDG reset does not come (its scenario says so; not checked on a board). +The board follows UM2505 Rev 7 (its jumpers, power paths with U4's +switch, solder bridges, connectors and crystals) and the part DS12288 Rev 6 +(start-up, flash and PVD values) and RM0440 Rev 9 (reset values, EXTI's +direct lines, the package code). + Not yet: the peripherals above, the timers' G4 additions (OCxM's and SMS's fourth bits, channels 5 and 6, dithering, the encoder index, the G4's ITR -table), the STLINK-V3E itself (its USB, SWD and drive), MB1367's own -resistor and capacitor values (the Nucleo-64's usual ones are assumed: its -schematic was not at hand), the datasheet's start-up and flash times -checked against DS12288 itself. +table), the STLINK-V3E itself (its USB, SWD and drive), JP8's factory +VREF+ from the TL1431 reference and LD2's transistor driver (both await a +TL1431 part and MB1367's schematic), MB1367's own resistor values (assumed +until its schematic). ## DC motors and their driver, the robot's first parts (2026-11-08) diff --git a/docs/coverage.md b/docs/coverage.md index 051a02b8c..689bbdde8 100644 --- a/docs/coverage.md +++ b/docs/coverage.md @@ -669,4 +669,4 @@ Boards: NUCLEO-G474RE. | QUADSPI | — | **missing** | | DBGMCU | `stm32f4-dbgmcu` | modelled | -Declared omissions: the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, DMA1, DMA2 and DMAMUX, the I2Cs and SPIs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC; the timers' G4 additions: OCxM's fourth bit (retriggerable one-pulse, combined and asymmetric PWM), SMS's fourth bit (combined reset and trigger, the extended encoder modes), the internal trigger inputs ITR4 to ITR10 and TS's fifth bit, MMS's fourth bit, channels 5 and 6, dithering (DITHEN: ARR and CCRx read as their 16 integer bits), UIFREMAP, the encoder index (ECR), the asymmetric dead times (DTR2), break 2, the comparators on TISEL and AF1/AF2's break sources, the G4's ITR interconnection table (the F4's is used); the start-up times, flash times and PVD thresholds are DS12288's typical values as transcribed without the datasheet at hand (HSI16 0.8 us, an HSE crystal 2 ms, LSI 80 us, LSE 2 s, HSI48 2.5 us, the PLL's lock 15 us; a double word 81.7 us, a fast row 2.61 ms, a page erase 22.02 ms, a bank erase 22.13 ms; the PVD at 2.0 to 2.9 V), and their spread and dependence on temperature are not modelled; RCC: the clock security systems (CSSON, LSECSSON: the oscillators never fail), LSEDRV, HSITRIM and HSI48CAL's effect on the frequencies, the CRS's trimming, a peripheral held in reset while its *RSTR bit stays set, the brownout reset (BORRSTF only at power-on), the sleep-mode enables (*SMENR), MCO and LSCO on their pins; PWR: the regulator's settling (VOSF never set) and the wake-up times, the supply currents, the PVMs (VDDA is VDD), UCPD's dead-battery bits, VBAT charging; FLASH: the option bytes' programming time, the read protection's levels and their mass erase, PCROP and the securable area, ECC, the bank swap (BFB2, FB_MODE), the boot from SRAM, the power-down modes, the caches' real line length; USART: noise detection (NE never sets, ONEBIT does nothing), auto baud rate detection, TXINV and RXINV, DE's assertion and deassertion times (DEAT, DEDT), the synchronous slave, smartcard and IrDA modes, TCBGT; SYSCFG: SWPR's write protection of the CCM SRAM, its erase time, the parity errors CFGR2 reports; EXTI: the internal lines' sources but PVD's; GPIO: EVENTOUT, the I/O compensation, the 5 V tolerant pins' clamps; the electrical I/O values (io.electrical) are the F446's and DS12288's typical ones, not checked against the datasheet's tables; the package code at 0x1FFF7500 reads erased; DBGMCU's REV_ID 0x2001 (the silicon revision is assumed); a halted core draws its sleep current. +Declared omissions: the peripherals coverage.md lists as missing keep their register values and raise mcu.unsupported_access: the ADCs, DACs, comparators, op-amps and VREFBUF, DMA1, DMA2 and DMAMUX, the I2Cs and SPIs, RTC and TAMP, LPTIM1, RNG, CORDIC, FMAC, CRS, the FDCANs, USB, UCPD, HRTIM, QUADSPI, SAI and FMC; the timers' G4 additions: OCxM's fourth bit (retriggerable one-pulse, combined and asymmetric PWM), SMS's fourth bit (combined reset and trigger, the extended encoder modes), the internal trigger inputs ITR4 to ITR10 and TS's fifth bit, MMS's fourth bit, channels 5 and 6, dithering (DITHEN: ARR and CCRx read as their 16 integer bits), UIFREMAP, the encoder index (ECR), the asymmetric dead times (DTR2), break 2, the comparators on TISEL and AF1/AF2's break sources, the G4's ITR interconnection table (the F4's is used); the start-up times, flash times and PVD thresholds are DS12288 Rev 6's typical values (HSI16 0.8 us, an HSE crystal 2 ms, LSI 80 us, LSE 2 s, HSI48 2.5 us, the PLL's lock 15 us; a double word 81.7 us, a fast row 1.91 ms, a page erase 22.02 ms, a bank erase 22.13 ms; the PVD's thresholds), not their spread between parts or their dependence on temperature; RCC: the clock security systems (CSSON, LSECSSON: the oscillators never fail), LSEDRV, HSITRIM and HSI48CAL's effect on the frequencies, the CRS's trimming, a peripheral held in reset while its *RSTR bit stays set, the brownout reset (BORRSTF only at power-on), the sleep-mode enables (*SMENR), MCO and LSCO on their pins; PWR: the regulator's settling (VOSF never set) and the wake-up times, the supply currents, the PVMs (VDDA is VDD), UCPD's dead-battery bits, VBAT charging; FLASH: the option bytes' programming time, the read protection's levels and their mass erase, PCROP and the securable area, ECC, the bank swap (BFB2, FB_MODE), the boot from SRAM, the power-down modes, the caches' real line length; USART: noise detection (NE never sets, ONEBIT does nothing), auto baud rate detection, TXINV and RXINV, DE's assertion and deassertion times (DEAT, DEDT), the synchronous slave, smartcard and IrDA modes, TCBGT; SYSCFG: SWPR's write protection of the CCM SRAM, its erase time, the parity errors CFGR2 reports; EXTI: the internal lines' sources but PVD's; GPIO: EVENTOUT, the I/O compensation, the 5 V tolerant pins' clamps; the I/O thresholds are DS12288's typical characteristics (0.39 x VDD - 0.06 and 0.49 x VDD + 0.26, 200 mV of hysteresis, 40 kOhm pulls), not the guaranteed 0.3 and 0.7 x VDD; the output resistances and edge rates are the F446's; DBGMCU's REV_ID 0x2001 (revision Z: which revision a board carries varies, UM2505 10.1); a halted core draws its sleep current. diff --git a/tests/vendor/stm32cubeg4/nucleo_g474re/flash_fastprogram/scenario.json b/tests/vendor/stm32cubeg4/nucleo_g474re/flash_fastprogram/scenario.json index 403a24a65..b78fc320a 100644 --- a/tests/vendor/stm32cubeg4/nucleo_g474re/flash_fastprogram/scenario.json +++ b/tests/vendor/stm32cubeg4/nucleo_g474re/flash_fastprogram/scenario.json @@ -2,15 +2,15 @@ "schema_version": 1, "kind": "scenario", "name": "flash_fastprogram", - "until": "3.6s", - "description": "FLASH_FastProgram: bank 2 mass-erased (MER2, 22.13 ms), then programmed a 256-byte row at a time (FSTPG, 1024 x 2.61 ms) by a program running from bank 1, which goes on meanwhile and polls BSY: about 2.7 s before LD2 comes on once every word reads back.", + "until": "3s", + "description": "FLASH_FastProgram: bank 2 mass-erased (MER2, 22.13 ms), then programmed a 256-byte row at a time (FSTPG, 1024 x 1.91 ms, DS12288's fast row) by a program running from bank 1, which goes on meanwhile and polls BSY: about 2 s before LD2 comes on once every word reads back.", "inputs": [], "assertions": [ { "id": "working", "between": [ "100ms", - "2.6s" + "1.9s" ], "probe": "led", "expect": { @@ -20,8 +20,8 @@ { "id": "pass", "between": [ - "2.8s", - "3.5s" + "2.1s", + "2.9s" ], "probe": "led", "expect": { From da6b3b79a06a870fdea4937e492fd3ad0b496e31 Mon Sep 17 00:00:00 2001 From: Junior Deogracias Date: Fri, 13 Nov 2026 01:17:34 +0100 Subject: [PATCH 08/10] NUCLEO-G474RE built from MB1367's schematic, with the TL1431 and BSR14 Every part of MB1367 D-01 with its designator and value: U4's path with C11, C5, R8 and LD4 on FAULT; U11's and U12's capacitors; the supplies' decoupling; VREF from U14 (TL1431CL5T) and Q2 at 3.26 V on VREF+ through JP8's factory position; LD2 switched by Q1 from 3V3; B1 active high as the schematic draws it (R26, R27, C35). The example counts B1's rising edges; CubeG4's GPIO_EXTI toggles LD2 on the release, as on a board. JP8 and LD4 on the artwork; a fixture for LD2 through Q1. emblink/tl1431cl5t: the shunt reference against ST's datasheet (VREF, figure 19's open-loop gain, Ioff, figure 22's step). emblink/bsr14: the BSR14 with onsemi's SPICE model, VCE(sat) and VBE(sat) fixtures. The regulator primitive's output has 1 mOhm while it regulates: an LDO with its input up at the operating point no longer faces its output capacitor's initial-voltage source as a second ideal source, which made Newton cycle (9 V on VIN did not solve). --- CHANGELOG.md | 30 +- catalog/boards/nucleo_g474re/artwork.svg | 3 + catalog/boards/nucleo_g474re/board.json | 737 ++++++++++++------ .../boards/nucleo_g474re/tests/ld2-q1.json | 78 ++ .../nucleo_g474re/tests/usb-powered.json | 27 +- .../nucleo_g474re/tests/user-button.json | 6 +- catalog/components/bsr14/component.json | 192 +++++ catalog/components/bsr14/symbol.svg | 2 + catalog/components/bsr14/tests/ld2.json | 93 +++ catalog/components/bsr14/tests/off.json | 69 ++ catalog/components/bsr14/tests/sat-150ma.json | 74 ++ catalog/components/bsr14/tests/sat-500ma.json | 73 ++ catalog/components/tl1431cl5t/component.json | 294 +++++++ catalog/components/tl1431cl5t/symbol.svg | 2 + .../tl1431cl5t/tests/divider-3v25.json | 84 ++ catalog/components/tl1431cl5t/tests/off.json | 58 ++ .../components/tl1431cl5t/tests/pulse.json | 65 ++ .../tl1431cl5t/tests/regulation.json | 59 ++ .../components/tl1431cl5t/tests/vka-vref.json | 59 ++ core/analog/devices.c | 12 +- docs/STATUS.md | 23 +- docs/gallery/README.md | 2 +- .../nucleo-g474re/board-nucleo-g474re.png | Bin 94949 -> 95327 bytes .../nucleo-g474re/design-nucleo-g474re.png | Bin 190390 -> 190365 bytes .../nucleo-g474re/run-nucleo-g474re.png | Bin 208169 -> 202802 bytes examples/nucleo-g474re-blink-serial/README.md | 4 +- .../firmware/blink-serial.elf | Bin 141420 -> 141420 bytes .../firmware/main.c | 16 +- .../nucleo-g474re-blink-serial/project.json | 2 +- .../scenarios/blink.json | 2 +- tests/unit/test_analog.c | 24 +- .../nucleo_g474re/gpio_exti/scenario.json | 10 +- .../nucleo_g474re/iwdg_reset/scenario.json | 2 +- .../stm32cubeg4/nucleo_g474re/project.json | 2 +- .../nucleo_g474re/pwr_stop0/scenario.json | 2 +- 35 files changed, 1798 insertions(+), 308 deletions(-) create mode 100644 catalog/boards/nucleo_g474re/tests/ld2-q1.json create mode 100644 catalog/components/bsr14/component.json create mode 100644 catalog/components/bsr14/symbol.svg create mode 100644 catalog/components/bsr14/tests/ld2.json create mode 100644 catalog/components/bsr14/tests/off.json create mode 100644 catalog/components/bsr14/tests/sat-150ma.json create mode 100644 catalog/components/bsr14/tests/sat-500ma.json create mode 100644 catalog/components/tl1431cl5t/component.json create mode 100644 catalog/components/tl1431cl5t/symbol.svg create mode 100644 catalog/components/tl1431cl5t/tests/divider-3v25.json create mode 100644 catalog/components/tl1431cl5t/tests/off.json create mode 100644 catalog/components/tl1431cl5t/tests/pulse.json create mode 100644 catalog/components/tl1431cl5t/tests/regulation.json create mode 100644 catalog/components/tl1431cl5t/tests/vka-vref.json diff --git a/CHANGELOG.md b/CHANGELOG.md index d95ac4301..94a7eabb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,8 +37,8 @@ versions follow semantic versioning. There is no release yet. the LSE crystal X2, LD2 on PA5, B1 on PC13, B2, LD3, JP5's four supply positions, JP6 (IDD), JP7, U11 and U12, the Arduino and morpho connectors, the VCP on LPUART1, its option bytes as ST ships the board - (nSWBOOT0 0), original artwork, and six fixtures (USB, VIN, E5V, VIN - without JP5, the IDD ammeter, B1). + (nSWBOOT0 0), original artwork, and seven fixtures (USB, VIN, E5V, VIN + without JP5, the IDD ammeter, B1, LD2 through Q1). - A board can give its MCU's memory as it ships (`mcu.memory`: the NUCLEO-G474RE's option bytes), and an MCU model can choose the boot (`boot_pin`, `boot_system`: the G4's BOOT0 on PB8). @@ -52,9 +52,29 @@ versions follow semantic versioning. There is no release yet. - The NUCLEO-G474RE checked against UM2505 Rev 7 and DS12288 Rev 6: U4 (STMPS2151STR) and LD4 in the STLINK-V3E's 5 V path, CN10 pins 35 and 37 on USART1 (the factory solder bridges), VREF+ on its own net through JP8 - and the ferrite bead L2 (VDDA through L1), the crystals' parts, the - datasheet's decoupling; the fast row's programming time is DS12288's - 1.91 ms and the PVD's thresholds its falling and rising ones. + and the ferrite bead L2 (VDDA through L1), the crystals' parts; the fast + row's programming time is DS12288's 1.91 ms and the PVD's thresholds its + falling and rising ones. +- The NUCLEO-G474RE built from MB1367 D-01's schematic, every part with its + designator and value: U4's input and output capacitors, R8 on T_PWR_EN + and R1 with LD4 on its FAULT; U11's and U12's capacitors; VDD's, VDDA's, + VBAT's and VREF+'s decoupling; VREF from U14 (TL1431CL5T) and Q2 at + 3.26 V, on VREF+ through JP8's factory position (it was VDD); LD2 + switched by Q1 from 3V3 (R25, R29, R28), so its current no longer passes + JP6's ammeter; B1 active high, as the schematic draws it (VDD through + B1, R26 to ground, R27 and C35 on PC13; it was active low): the + example counts B1's rising edges, and CubeG4's GPIO_EXTI, which takes the + falling edge, toggles LD2 on the release, as it does on the board. +- Added `emblink/tl1431cl5t`, ST's TL1431 programmable shunt reference in + SOT23-5L (2.500 V, the open-loop gain of the datasheet's figure 19, Ioff, + a step response within figure 22's microsecond; five fixtures), and + `emblink/bsr14`, the BSR14 NPN with onsemi's SPICE model (VCE(sat) and + VBE(sat) at 150 mA and 500 mA, MB1367's LD2 circuit). +- The `regulator` primitive's output has a 1 mOhm resistance while it + regulates. An output capacitor held at its initial voltage at the + operating point (an LDO with full input at t = 0) no longer sets two + ideal sources against each other: the regulator starts in current limit + and charges it, as a real one does. - Fixed: exception entry left CONTROL.SPSEL set when the thread ran on the process stack, so a handler read CONTROL[1] as 1 (ARMv7-M's ExceptionTaken clears it); CubeG4's CORTEXM_ProcessStack found it. diff --git a/catalog/boards/nucleo_g474re/artwork.svg b/catalog/boards/nucleo_g474re/artwork.svg index 7e9612b8d..d46ac45e3 100644 --- a/catalog/boards/nucleo_g474re/artwork.svg +++ b/catalog/boards/nucleo_g474re/artwork.svg @@ -32,10 +32,13 @@ IDD +JP8 VREF1 + USER JP7 BOOT0 RESET LD2 +LD4 OC LD3 5V_PWR STM32G474RET6 diff --git a/catalog/boards/nucleo_g474re/board.json b/catalog/boards/nucleo_g474re/board.json index 729bccef7..5eabe760d 100644 --- a/catalog/boards/nucleo_g474re/board.json +++ b/catalog/boards/nucleo_g474re/board.json @@ -4,7 +4,7 @@ "id": "emblink/nucleo_g474re", "version": "1.0.0", "name": "NUCLEO-G474RE", - "description": "ST's NUCLEO-G474RE (MB1367): an STM32G474RET6 with the 24 MHz HSE crystal X3 and the 32.768 kHz LSE crystal X2, the green user LED LD2 on PA5, the blue USER button on PC13, the black RESET button, the green power LED LD3, JP5 choosing the STLINK-V3E's USB, VIN, E5V or a USB charger, JP6 (IDD) to measure the MCU's current, the Arduino Uno V3 headers and the two ST morpho headers. The STLINK-V3E's virtual COM port is the session's serial console on LPUART1 (PA2/PA3), and a serial port on the host (embsim serve --serial).", + "description": "ST's NUCLEO-G474RE (MB1367): an STM32G474RET6 with the 24 MHz HSE crystal X3 and the 32.768 kHz LSE crystal X2, the green user LED LD2 on PA5, the blue, active-high USER button on PC13, the black RESET button, the green power LED LD3, JP5 choosing the STLINK-V3E's USB, VIN, E5V or a USB charger, JP6 (IDD) to measure the MCU's current, the Arduino Uno V3 headers and the two ST morpho headers. The STLINK-V3E's virtual COM port is the session's serial console on LPUART1 (PA2/PA3), and a serial port on the host (embsim serve --serial).", "keywords": [ "nucleo", "nucleo-64", @@ -19,7 +19,7 @@ "mcu": { "ref": "st/stm32g474re", "package": "lqfp64", - "instance": "U1", + "instance": "U13", "memory": [ { "base": "0x1FFF7800", @@ -41,13 +41,84 @@ } }, "components": [ + { + "id": "C11", + "component": "emblink/capacitor", + "params": { + "capacitance": "1u", + "esr": 0.01 + }, + "doc": "C11 (1 uF ceramic, a 10 mOhm ESR): U4's input capacitor on 5V_USB_CHGR" + }, + { + "id": "U4", + "component": "emblink/stmps2151str", + "doc": "U4 STMPS2151STR: 5V_USB_CHGR (CN1's VBUS) to 5V_USB_STLK once the STLINK-V3E's T_PWR_EN is high, after the USB enumeration (UM2505 7.4.1); its current limit protects the PC's port" + }, + { + "id": "C5", + "component": "emblink/capacitor", + "params": { + "capacitance": "1u" + }, + "doc": "U4's output capacitor on 5V_USB_STLK" + }, + { + "id": "R8", + "component": "emblink/resistor", + "params": { + "resistance": "10k" + }, + "doc": "R8: T_PWR_EN pulled down (U4 off until the STLINK-V3E drives it)" + }, + { + "id": "R_TPWREN", + "component": "emblink/resistor", + "params": { + "resistance": 40 + }, + "doc": "The STLINK-V3E's T_PWR_EN (U5's PB0) driving U4's EN high, as after the host granted 500 mA: a stand-in for the STLINK's output" + }, + { + "id": "R1", + "component": "emblink/resistor", + "params": { + "resistance": "1k" + }, + "doc": "R1: LD4's series resistor from 5V_USB_CHGR" + }, + { + "id": "LD4", + "component": "emblink/led", + "params": { + "color": "red" + }, + "doc": "LD4 (red): U4's FAULT, more than 500 mA drawn from the STLINK-V3E's USB" + }, + { + "id": "C41", + "component": "emblink/capacitor", + "params": { + "capacitance": "10u", + "esr": 0.01 + }, + "doc": "C41 (10 uF ceramic, a 10 mOhm ESR): U11's input capacitor" + }, { "id": "U11", "component": "emblink/regulator", "params": { "part": "LD1117S50" }, - "doc": "U11 LD1117S50TR: 5 V from VIN (7 to 12 V) to JP5's VIN position" + "doc": "U11 LD1117S50TR: 5V_VIN from VIN (7 to 12 V), to JP5's VIN position" + }, + { + "id": "C38", + "component": "emblink/capacitor", + "params": { + "capacitance": "10u" + }, + "doc": "U11's output capacitor" }, { "id": "JP5_STLK", @@ -55,12 +126,12 @@ "params": { "initially_closed": true }, - "doc": "JP5 (5V_SEL) on pins 1-2, STLK: the board runs from the STLINK-V3E's USB through U4 (the factory position)" + "doc": "JP5 (5V_SEL) on pins 1-2, STLK: +5V from 5V_USB_STLK, the STLINK-V3E's USB through U4 (the factory position)" }, { "id": "JP5_VIN", "component": "emblink/toggle_switch", - "doc": "JP5 on pins 3-4, VIN: +5V from U11" + "doc": "JP5 on pins 3-4, 5V_VIN: +5V from U11" }, { "id": "JP5_E5V", @@ -70,7 +141,39 @@ { "id": "JP5_CHGR", "component": "emblink/toggle_switch", - "doc": "JP5 on pins 7-8, CHGR: +5V straight from the STLINK-V3E's USB connector (5V_USB_CHGR, also on CN10 pin 8), for a USB charger: no enumeration, no current limit" + "doc": "JP5 on pins 7-8, CHG: +5V straight from the STLINK-V3E's USB connector (5V_USB_CHGR, also on CN10 pin 8), for a USB charger: no enumeration, no current limit" + }, + { + "id": "R7", + "component": "emblink/resistor", + "params": { + "resistance": 510 + }, + "doc": "R7: LD3's series resistor" + }, + { + "id": "LD3", + "component": "emblink/led", + "params": { + "color": "green" + }, + "doc": "LD3 (5V_PWR, green): +5V is present" + }, + { + "id": "C37", + "component": "emblink/capacitor", + "params": { + "capacitance": "1u" + }, + "doc": "U12's input capacitor" + }, + { + "id": "C36", + "component": "emblink/capacitor", + "params": { + "capacitance": "100n" + }, + "doc": "U12's input capacitor" }, { "id": "U12", @@ -78,7 +181,23 @@ "params": { "part": "LD39050PU33R" }, - "doc": "U12 LD39050PU33R: +3.3V from +5V (500 mA)" + "doc": "U12 LD39050PU33R: +3.3V from +5V (500 mA), its EN tied to its input" + }, + { + "id": "C39", + "component": "emblink/capacitor", + "params": { + "capacitance": "1u" + }, + "doc": "U12's output capacitor" + }, + { + "id": "C40", + "component": "emblink/capacitor", + "params": { + "capacitance": "100n" + }, + "doc": "U12's output capacitor" }, { "id": "JP6", @@ -89,139 +208,181 @@ "doc": "JP6 (IDD, on from the factory): +3.3V to the STM32's VDD; remove it and put an ammeter across IDD_3V3 and IDD_VDD" }, { - "id": "LD3", - "component": "emblink/led", + "id": "R35", + "component": "emblink/resistor", "params": { - "color": "green" + "resistance": 180 }, - "doc": "LD3 (5V_PWR, green): +5V is present" + "doc": "R35: U14's cathode and Q2's base fed from +5V" }, { - "id": "R_LD3", - "component": "emblink/resistor", + "id": "U14", + "component": "emblink/tl1431cl5t", + "doc": "U14 TL1431CL5T: holds its REF at 2.5 V by pulling Q2's base down" + }, + { + "id": "Q2", + "component": "emblink/bsr14", + "doc": "Q2 BSR14: the emitter follower that supplies VREF" + }, + { + "id": "C51", + "component": "emblink/capacitor", "params": { - "resistance": "1k" + "capacitance": "100p" }, - "doc": "LD3's series resistor (its value assumed: MB1367's schematic not at hand)" + "doc": "C51: the loop's compensation from U14's cathode to its REF" }, { - "id": "U4", - "component": "emblink/stmps2151str", - "doc": "U4 STMPS2151STR: the STLINK-V3E's 5 V (5V_USB_STLK) once its T_PWR_EN goes high after the USB enumeration (UM2505 7.4.1); its current limit protects the PC's port" + "id": "R33", + "component": "emblink/resistor", + "params": { + "resistance": "10k" + }, + "doc": "R33: VREF to U14's REF (SB14 off, the factory's: VREF 3.25 V)" }, { - "id": "R_TPWREN", + "id": "R34", "component": "emblink/resistor", "params": { - "resistance": 40 + "resistance": "33k" }, - "doc": "The STLINK-V3E's T_PWR_EN driving U4's EN high, as after the host granted 500 mA (its pin's resistance assumed)" + "doc": "R34: U14's REF to AGND" }, { - "id": "LD4", - "component": "emblink/led", + "id": "C50", + "component": "emblink/capacitor", "params": { - "color": "red" + "capacitance": "100n" }, - "doc": "LD4 (red): U4's fault, more than 500 mA drawn from the STLINK-V3E's USB" + "doc": "VREF's decoupling" }, { - "id": "R_LD4", - "component": "emblink/resistor", + "id": "C46", + "component": "emblink/capacitor", "params": { - "resistance": "1k" + "capacitance": "10u" }, - "doc": "LD4's series resistor (its value assumed)" + "doc": "VREF's bulk capacitor" }, { - "id": "L1", - "component": "emblink/ferrite_bead", - "doc": "L1, the ferrite bead from VDD to VDDA (SB8 off: not shunted; its part's values the catalog's default)" + "id": "JP8_VREF", + "component": "emblink/toggle_switch", + "params": { + "initially_closed": true + }, + "doc": "JP8 on pins 1-2: VREF+ from VREF, 3.25 V (the factory position)" + }, + { + "id": "JP8_VDD", + "component": "emblink/toggle_switch", + "doc": "JP8 on pins 2-3: VREF+ from VDD" + }, + { + "id": "C47", + "component": "emblink/capacitor", + "params": { + "capacitance": "100n" + }, + "doc": "C47: JP8's common pin decoupled to AGND" }, { "id": "L2", "component": "emblink/ferrite_bead", - "doc": "L2, the ferrite bead on VREF+'s supply (SB10 off: not shunted)" + "doc": "L2, 600 ohm at 100 MHz, to VREF+ (SB10 off: not shunted; its DC values the catalog's)" }, { - "id": "JP8_VDD", - "component": "emblink/toggle_switch", + "id": "C48", + "component": "emblink/capacitor", "params": { - "initially_closed": true + "capacitance": "1u" }, - "doc": "JP8 (VREF+ selection) on pins 2-3: VREF+ from VDD. The board leaves the factory with JP8 on pins 1-2, VREF+ from a TL1431CL5T shunt reference at 3.25 V (R33 10 kOhm, R34 33 kOhm, SB14 off): not modelled yet (no shunt reference in the catalog), so VDD stands for it" + "doc": "VREF+'s 1 uF" }, { - "id": "C_VDD1", + "id": "C49", "component": "emblink/capacitor", "params": { "capacitance": "100n" }, - "doc": "VDD's decoupling at one of its four pins (DS12288 figure 16)" + "doc": "VREF+'s 100 nF" + }, + { + "id": "L1", + "component": "emblink/ferrite_bead", + "doc": "L1, 600 ohm at 100 MHz, from VDD to VDDA (SB8 off: not shunted)" }, { - "id": "C_VDD2", + "id": "C43", "component": "emblink/capacitor", "params": { - "capacitance": "100n" + "capacitance": "1u" }, - "doc": "VDD's decoupling at one of its four pins (DS12288 figure 16)" + "doc": "AVDD's 1 uF" }, { - "id": "C_VDD3", + "id": "C44", "component": "emblink/capacitor", "params": { "capacitance": "100n" }, - "doc": "VDD's decoupling at one of its four pins (DS12288 figure 16)" + "doc": "AVDD's 100 nF" }, { - "id": "C_VDD4", + "id": "C53", "component": "emblink/capacitor", "params": { - "capacitance": "100n" + "capacitance": "1u" }, - "doc": "VDD's decoupling at one of its four pins (DS12288 figure 16)" + "doc": "VBAT's capacitor (VBAT from VDD through SB38)" }, { - "id": "C_VDD_BULK", + "id": "C55", "component": "emblink/capacitor", "params": { "capacitance": "4.7u" }, - "doc": "VDD's bulk capacitor (DS12288 figure 16)" + "doc": "VDD's bulk capacitor" }, { - "id": "C_VDDA1", + "id": "C45", "component": "emblink/capacitor", "params": { - "capacitance": "1u" + "capacitance": "100n" }, - "doc": "VDDA's 1 uF (DS12288 figure 16)" + "doc": "C45: VDD's decoupling at one of its four pins" }, { - "id": "C_VDDA2", + "id": "C54", "component": "emblink/capacitor", "params": { - "capacitance": "10n" + "capacitance": "100n" }, - "doc": "VDDA's 10 nF (DS12288 figure 16)" + "doc": "C54: VDD's decoupling at one of its four pins" }, { - "id": "C_VREF1", + "id": "C42", "component": "emblink/capacitor", "params": { - "capacitance": "1u" + "capacitance": "100n" }, - "doc": "VREF+'s 1 uF (DS12288 figure 16)" + "doc": "C42: VDD's decoupling at one of its four pins" }, { - "id": "C_VREF2", + "id": "C52", "component": "emblink/capacitor", "params": { "capacitance": "100n" }, - "doc": "VREF+'s 100 nF (DS12288 figure 16)" + "doc": "C52: VDD's decoupling at one of its four pins" + }, + { + "id": "R25", + "component": "emblink/resistor", + "params": { + "resistance": 510 + }, + "doc": "R25: LD2's series resistor from 3V3" }, { "id": "LD2", @@ -229,44 +390,57 @@ "params": { "color": "green" }, - "doc": "LD2 (USER, green): PA5 (Arduino D13, SB6 on) high lights it; on the board through a transistor, here driven by PA5 itself" + "doc": "LD2 (USER, green), switched by Q1: PA5 (Arduino D13, SB6 on) high lights it" + }, + { + "id": "Q1", + "component": "emblink/bsr14", + "doc": "Q1 BSR14: LD2's low-side switch, so LD2's current does not come from VDD" }, { - "id": "R_LD2", + "id": "R29", "component": "emblink/resistor", "params": { - "resistance": 510 + "resistance": "47k" + }, + "doc": "R29: PA5 to Q1's base" + }, + { + "id": "R28", + "component": "emblink/resistor", + "params": { + "resistance": "100k" }, - "doc": "LD2's series resistor (its value assumed)" + "doc": "R28: Q1's base pulled down" }, { "id": "B1", "component": "emblink/push_button", - "doc": "B1 USER (blue): pulls PC13 to ground through R_B1 while pressed, as CubeG4's GPIO_EXTI example and Zephyr's board take it (a falling edge on a press)" + "doc": "B1 USER (blue): joins its node to VDD while pressed (active high)" }, { - "id": "R_PC13", + "id": "R26", "component": "emblink/resistor", "params": { - "resistance": "4.7k" + "resistance": "100k" }, - "doc": "PC13's pull-up to VDD: high while B1 is released (value assumed)" + "doc": "R26: B1's node pulled down: PC13 low while B1 is released" }, { - "id": "R_B1", + "id": "R27", "component": "emblink/resistor", "params": { - "resistance": 100 + "resistance": 330 }, - "doc": "B1's resistor to ground (value assumed)" + "doc": "R27: B1's node to PC13 (B_USER, through SB16)" }, { - "id": "C_PC13", + "id": "C35", "component": "emblink/capacitor", "params": { "capacitance": "100n" }, - "doc": "PC13's filter capacitor (value assumed)" + "doc": "C35: B_USER's filter capacitor, charged through R27 (about 33 us) when B1 is pressed" }, { "id": "B2", @@ -274,25 +448,25 @@ "doc": "B2 RESET (black): pulls NRST low" }, { - "id": "C_NRST", + "id": "C34", "component": "emblink/capacitor", "params": { "capacitance": "100n" }, - "doc": "The 100 nF on PG10-NRST (SB1 on): with the STM32's internal pull-up, it holds the part in reset at power-on" + "doc": "C34, 100 nF on PG10-NRST (SB1 on): with the STM32's internal pull-up, it holds the part in reset at power-on" }, { "id": "JP7", "component": "emblink/toggle_switch", - "doc": "JP7 (not fitted): the BOOT0/PB8 pull-down, for when the option bytes' nSWBOOT0 makes PB8 the boot pin" + "doc": "JP7 (not fitted): PB8-BOOT0 to R31, for when the option bytes' nSWBOOT0 makes PB8 the boot pin" }, { - "id": "R_JP7", + "id": "R31", "component": "emblink/resistor", "params": { "resistance": "10k" }, - "doc": "JP7's pull-down (value assumed)" + "doc": "R31: BOOT0's pull-down through JP7" }, { "id": "X2", @@ -304,7 +478,7 @@ "lm": "7.8k", "rm": "50k" }, - "doc": "X2 NX3215SA-32.768kHz-EXS00A-MU00525 (6 pF load, 20 ppm) on PC14/PC15 (SB30, SB31 on); its motional values assumed" + "doc": "X2 NX3215SA-32.768kHz-EXS00A-MU00525 (6 pF load, 20 ppm) on PC14/PC15 (SB30, SB31 on), C57 and C58 5.1 pF; its motional values the catalog's 32.768 kHz equivalent" }, { "id": "X3", @@ -312,7 +486,7 @@ "params": { "hz": "24meg" }, - "doc": "X3 NX2016SA-24MHz-EXS00A-CS10820 (6 pF load, 20 ppm) on PF0/PF1 (SB25, SB26 on), with C56 and C59 6.8 pF" + "doc": "X3 NX2016SA-24MHz-EXS00A-CS10820 (6 pF load, 20 ppm) on PF0/PF1 (SB25, SB26 on), C56 and C59 6.8 pF" }, { "id": "CN6", @@ -372,39 +546,44 @@ } ], "nets": { - "VIN": [ - "U11.IN", - "CN6.8", - "CN7.24" - ], - "5V_VIN": [ - "U11.OUT", - "JP5_VIN.1" - ], "U5V": [ "CN1.1", + "C11.1", "U4.IN", "R_TPWREN.1", - "R_LD4.1", + "R1.1", "JP5_CHGR.1", "CN10.8" ], "T_PWR_EN": [ "U4.EN", + "R8.1", "R_TPWREN.2" ], "5V_USB_STLK": [ "U4.OUT", + "C5.1", "JP5_STLK.1" ], "LD4_A": [ - "R_LD4.2", + "R1.2", "LD4.A" ], "USB_OC": [ "LD4.K", "U4.FAULT" ], + "VIN": [ + "U11.IN", + "C41.1", + "CN6.8", + "CN7.24" + ], + "5V_VIN": [ + "U11.OUT", + "C38.1", + "JP5_VIN.1" + ], "E5V": [ "JP5_E5V.1", "CN7.6" @@ -414,78 +593,123 @@ "JP5_VIN.2", "JP5_E5V.2", "JP5_CHGR.2", - "U12.IN", - "R_LD3.1", + "R7.1", "CN6.5", - "CN7.18" + "CN7.18", + "U12.IN", + "C37.1", + "C36.1", + "R35.1", + "Q2.C" ], "LD3_A": [ - "R_LD3.2", + "R7.2", "LD3.A" ], "3V3": [ "U12.OUT", + "C39.1", + "C40.1", "JP6.1", "CN6.2", "CN6.4", "CN7.12", - "CN7.16" + "CN7.16", + "R25.1" + ], + "VREF_K": [ + "R35.2", + "U14.CATHODE", + "Q2.B", + "C51.1" + ], + "VREF_FB": [ + "U14.REF", + "C51.2", + "R33.2", + "R34.1" + ], + "VREF": [ + "Q2.E", + "R33.1", + "C50.1", + "C46.1", + "JP8_VREF.1" ], "VDD": [ "JP6.2", - "U1.VDD", - "U1.VBAT", - "R_PC13.1", + "JP8_VDD.1", + "L1.1", + "U13.VDD", + "U13.VBAT", + "C53.1", + "C55.1", + "C45.1", + "C54.1", + "C42.1", + "C52.1", "CN7.5", "CN7.33", - "L1.1", - "JP8_VDD.1", - "C_VDD1.1", - "C_VDD2.1", - "C_VDD3.1", - "C_VDD4.1", - "C_VDD_BULK.1" - ], - "AVDD": [ - "U1.VDDA", - "L1.2", - "C_VDDA1.1", - "C_VDDA2.1" + "B1.1" ], - "VREF_SEL": [ + "JP8_2": [ + "JP8_VREF.2", "JP8_VDD.2", + "C47.1", "L2.1" ], "VREFP": [ - "U1.VREFP", + "U13.VREFP", "L2.2", + "C48.1", + "C49.1", "CN5.8", - "CN10.7", - "C_VREF1.1", - "C_VREF2.1" + "CN10.7" + ], + "AVDD": [ + "U13.VDDA", + "L1.2", + "C43.1", + "C44.1" ], "GND": [ - "C_VDD1.2", - "C_VDD2.2", - "C_VDD3.2", - "C_VDD4.2", - "C_VDD_BULK.2", - "C_VDDA1.2", - "C_VDDA2.2", - "C_VREF1.2", - "C_VREF2.2", "U4.GND", + "C11.2", + "C5.2", + "R8.2", "U11.GND", - "U12.GND", + "C41.2", + "C38.2", "LD3.K", - "LD2.K", + "U12.GND", + "C37.2", + "C36.2", + "C39.2", + "C40.2", + "U14.ANODE", + "R34.2", + "C50.2", + "C46.2", + "C47.2", + "C48.2", + "C49.2", + "C43.2", + "C44.2", + "C53.2", + "C55.2", + "C45.2", + "C54.2", + "C42.2", + "C52.2", + "Q1.E", + "R28.2", + "R26.2", + "C35.2", "B2.2", - "C_NRST.2", - "C_PC13.2", - "R_B1.2", - "R_JP7.2", - "U1.VSS", - "U1.VSSA", + "C34.2", + "R31.2", + "U13.VSS", + "U13.VSSA", "CN5.7", "CN6.6", "CN6.7", @@ -499,38 +723,48 @@ "CN1.5" ], "LD2_A": [ - "R_LD2.2", + "R25.2", "LD2.A" ], + "LD2_K": [ + "LD2.K", + "Q1.C" + ], + "Q1_B": [ + "Q1.B", + "R29.2", + "R28.1" + ], "B1_N": [ "B1.2", - "R_B1.1" + "R26.1", + "R27.1" ], "NRST": [ - "U1.NRST", + "U13.NRST", "B2.1", - "C_NRST.1", + "C34.1", "CN6.3", "CN7.14" ], - "JP7_N": [ + "BOOT0": [ "JP7.2", - "R_JP7.1" + "R31.1" ], "PC14": [ - "U1.PC14", + "U13.PC14", "X2.1" ], "PC15": [ - "U1.PC15", + "U13.PC15", "X2.2" ], "PF0": [ - "U1.PF0", + "U13.PF0", "X3.1" ], "PF1": [ - "U1.PF1", + "U13.PF1", "X3.2" ], "USB_DM": [ @@ -540,213 +774,212 @@ "CN1.3" ], "PC5": [ - "U1.PC5", + "U13.PC5", "CN9.1", "CN10.6", "CN10.37" ], "PC4": [ - "U1.PC4", + "U13.PC4", "CN9.2", "CN10.34", "CN10.35" ], "PA10": [ - "U1.PA10", + "U13.PA10", "CN9.3", "CN10.33" ], "PB3": [ - "U1.PB3", + "U13.PB3", "CN9.4", "CN10.31" ], "PB5": [ - "U1.PB5", + "U13.PB5", "CN9.5", "CN10.29" ], "PB4": [ - "U1.PB4", + "U13.PB4", "CN9.6", "CN10.27" ], "PB10": [ - "U1.PB10", + "U13.PB10", "CN9.7", "CN10.25" ], "PA8": [ - "U1.PA8", + "U13.PA8", "CN9.8", "CN10.23" ], "PA9": [ - "U1.PA9", + "U13.PA9", "CN5.1", "CN10.21" ], "PC7": [ - "U1.PC7", + "U13.PC7", "CN5.2", "CN10.19" ], "PB6": [ - "U1.PB6", + "U13.PB6", "CN5.3", "CN10.17" ], "PA7": [ - "U1.PA7", + "U13.PA7", "CN5.4", "CN10.15" ], "PA6": [ - "U1.PA6", + "U13.PA6", "CN5.5", "CN10.13" ], "PA5": [ - "U1.PA5", + "U13.PA5", "CN5.6", "CN10.11", - "R_LD2.1" + "R29.1" ], "PB9": [ - "U1.PB9", + "U13.PB9", "CN5.9", "CN10.5" ], "PB8": [ - "U1.PB8", + "U13.PB8", "CN5.10", "CN7.7", "CN10.3", "JP7.1" ], "PA0": [ - "U1.PA0", + "U13.PA0", "CN8.1", "CN7.28" ], "PA1": [ - "U1.PA1", + "U13.PA1", "CN8.2", "CN7.30" ], "PA4": [ - "U1.PA4", + "U13.PA4", "CN8.3", "CN7.32" ], "PB0": [ - "U1.PB0", + "U13.PB0", "CN8.4", "CN7.34" ], "PC1": [ - "U1.PC1", + "U13.PC1", "CN8.5", "CN7.36" ], "PC0": [ - "U1.PC0", + "U13.PC0", "CN8.6", "CN7.38" ], "PC10": [ - "U1.PC10", + "U13.PC10", "CN7.1" ], "PC11": [ - "U1.PC11", + "U13.PC11", "CN7.2" ], "PC12": [ - "U1.PC12", + "U13.PC12", "CN7.3" ], "PD2": [ - "U1.PD2", + "U13.PD2", "CN7.4" ], "PA13": [ - "U1.PA13", + "U13.PA13", "CN7.13" ], "PA14": [ - "U1.PA14", + "U13.PA14", "CN7.15" ], "PA15": [ - "U1.PA15", + "U13.PA15", "CN7.17" ], "PB7": [ - "U1.PB7", + "U13.PB7", "CN7.21" ], "PC13": [ - "U1.PC13", + "U13.PC13", "CN7.23", - "R_PC13.2", - "C_PC13.1", - "B1.1" + "R27.2", + "C35.1" ], "PC2": [ - "U1.PC2", + "U13.PC2", "CN7.35" ], "PC3": [ - "U1.PC3", + "U13.PC3", "CN7.37" ], "PC9": [ - "U1.PC9", + "U13.PC9", "CN10.1" ], "PC8": [ - "U1.PC8", + "U13.PC8", "CN10.2" ], "PC6": [ - "U1.PC6", + "U13.PC6", "CN10.4" ], "PA12": [ - "U1.PA12", + "U13.PA12", "CN10.12" ], "PA11": [ - "U1.PA11", + "U13.PA11", "CN10.14" ], "PB12": [ - "U1.PB12", + "U13.PB12", "CN10.16" ], "PB11": [ - "U1.PB11", + "U13.PB11", "CN10.18" ], "PB2": [ - "U1.PB2", + "U13.PB2", "CN10.22" ], "PB1": [ - "U1.PB1", + "U13.PB1", "CN10.24" ], "PB15": [ - "U1.PB15", + "U13.PB15", "CN10.26" ], "PB14": [ - "U1.PB14", + "U13.PB14", "CN10.28" ], "PB13": [ - "U1.PB13", + "U13.PB13", "CN10.30" ], "CN7_25_NC": [ @@ -756,10 +989,10 @@ "CN7.27" ], "PA2": [ - "U1.PA2" + "U13.PA2" ], "PA3": [ - "U1.PA3" + "U13.PA3" ] }, "ports": { @@ -1318,7 +1551,7 @@ "name": "user", "component": "B1", "gpio": "PC13", - "active": "low" + "active": "high" }, { "name": "reset", @@ -1385,6 +1618,21 @@ "selector": "#jp7", "input": "closed" }, + { + "component": "JP8_VREF", + "selector": "#jp8-vref", + "input": "closed" + }, + { + "component": "JP8_VDD", + "selector": "#jp8-vdd", + "input": "closed" + }, + { + "component": "LD4", + "selector": "#led-ld4", + "output": "luminance" + }, { "port": "IDD_3V3", "selector": "#pin-idd_3v3" @@ -1834,13 +2082,13 @@ }, "fidelity": { "functional": { - "claims": "Nets, ports, LD2, LD3, B1, B2 and the jumpers as parts; the STM32G474RE runs its firmware (see its description), its HSE the 24 MHz crystal X3 (HSEBYP clear, as on the real board) and its LSE the X2 crystal; its option bytes as ST ships the board (nSWBOOT0 0, nBOOT0 1: it boots its flash whatever PB8 is). The Arduino connectors carry UM2505's assignment (D0/D1 on PC5/PC4, USART1) and the morpho headers CN7 and CN10 every pin they bring out. The STLINK-V3E's virtual COM port is the session's console on LPUART1 (PA2/PA3) and a serial port on the host.", + "claims": "Nets, ports, LD2 to LD4, B1, B2 and the jumpers as parts, as MB1367 D-01's schematic draws them; the STM32G474RE (U13) runs its firmware (see its description), its HSE the 24 MHz crystal X3 (HSEBYP clear, as on the real board) and its LSE the X2 crystal; its option bytes as ST ships the board (nSWBOOT0 0, nBOOT0 1: it boots its flash whatever PB8 is). The Arduino connectors carry UM2505's assignment (D0/D1 on PC5/PC4, USART1) and the morpho headers CN7 and CN10 every pin they bring out with the factory's solder bridges. The STLINK-V3E's virtual COM port is the session's console on LPUART1 (PA2/PA3) and a serial port on the host.", "omissions": [ - "the STLINK-V3E itself: its USB enumeration (0483:374E), the mass-storage drag-and-drop programming, SWD and its NRST drive, LD1 (COM); the session programs and debugs the board (ADR-031)", + "the STLINK-V3E itself (sheet 7's U5, STM32F723IEK6): its USB enumeration (0483:374E), the mass-storage drag-and-drop programming, SWD and its NRST drive, LD1 (COM), its own supply (U7, D1 to D3); the session programs and debugs the board (ADR-031)", "the VCP's bytes reach LPUART1 directly, not as frames on PA3", - "the 41 solder bridges are fixed in their factory state as UM2505's table 12 gives them (PA2/PA3 on the VCP, PC4/PC5 on D1/D0 and CN10 pins 35 and 37, PB8 on D15 and CN7 pin 7, B1 on PC13, the crystals on PF0/PF1 and PC14/PC15 and not on the morpho headers)", - "a single JP5 shunt sits on one position only; the four switches here can all be closed", - "ST's BSP (stm32g4xx_nucleo.c) configures B1 as a rising edge with a pull-down; on this board (an external pull-up, a press pulling PC13 low) that BSP sees a press when B1 is released, as it would on the bench" + "the 41 solder bridges are fixed in their factory state as UM2505's table 12 and the schematic give them (PA2/PA3 on the VCP, PC4/PC5 on D1/D0 and CN10 pins 35 and 37, PB8 on D15 and CN7 pin 7, B1 on PC13, the crystals on PF0/PF1 and PC14/PC15 and not on the morpho headers)", + "a single JP5 or JP8 shunt sits on one position only; the switches here can all be closed", + "CubeG4's examples that take B1's falling edge (GPIO_EXTI and LL examples such as EXTI_ToggleLedOnIT_Init) act when B1 is released, as they would on the board: B1 is active high, their readmes say a press" ], "validation": [ "tests/*.json" @@ -1856,13 +2104,12 @@ ] }, "electrical": { - "claims": "The power paths of UM2505 7.4: the STLINK-V3E's USB 5 V (U5V) through U4 (STMPS2151STR, enabled by T_PWR_EN as after the enumeration; LD4 on its fault output) and JP5 pins 1-2 to +5V; VIN (7 to 12 V) through U11 (LD1117S50) and JP5 pins 3-4; E5V through pins 5-6; the USB charger position (pins 7-8) from CN1's VBUS directly; U12 (LD39050PU33R) makes +3.3V and JP6 (IDD) carries it to VDD and VBAT, VDDA through the ferrite bead L1 and VREF+ through JP8 and the ferrite bead L2. LD3 shows +5V, LD2 is lit by PA5, a pull-up holds PC13 high and B1 pulls it to ground with a capacitor on PC13, the 100 nF on NRST holds it low at power-on against the STM32's pull-up; X3 (NX2016SA 24 MHz) and X2 (NX3215SA 32.768 kHz) are crystals' equivalent circuits.", + "claims": "The power paths of MB1367 D-01's sheets 4, 6 and 7: CN1's VBUS (5V_USB_CHGR) through U4 (STMPS2151STR, its EN on T_PWR_EN with R8's pull-down, driven high as after the enumeration; LD4 with R1 on its FAULT) to 5V_USB_STLK and JP5 pins 1-2 to +5V; VIN (7 to 12 V) through U11 (LD1117S50, C41 and C38) and JP5 pins 3-4; E5V through pins 5-6; 5V_USB_CHGR directly through pins 7-8; U12 (LD39050PU33R, C36 to C40) makes +3.3V and JP6 (IDD) carries it to VDD (C55, C45, C54, C42, C52) and VBAT (C53), VDDA through the ferrite bead L1 (C43, C44); VREF from U14 (TL1431CL5T) and Q2 (BSR14) at 2.5 x (1 + R33 / R34) = 3.26 V with R35, C51, C50 and C46, to VREF+ through JP8 (pins 1-2, the factory's), C47 and the ferrite bead L2 (C48, C49). LD3 shows +5V through R7; LD2 is switched by Q1 from 3V3 through R25 (510 ohm), its base driven by PA5 through R29 (47 kOhm) against R28 (100 kOhm), so LD2's current does not come from VDD; B1 joins its node to VDD, R26 (100 kOhm) holds it low, R27 (330 ohm) takes it to PC13 with C35 (100 nF) there; C34 (100 nF) holds NRST low at power-on against the STM32's pull-up; JP7 (not fitted) and R31 pull BOOT0/PB8 down; X3 (NX2016SA 24 MHz) and X2 (NX3215SA 32.768 kHz) are crystals' equivalent circuits.", "omissions": [ - "MB1367's schematic was not at hand: the LED resistors, B1's network, JP7's pull-down, T_PWR_EN's drive and the ferrite beads' values are assumed; designators other than UM2505's (U4, U11, U12, JP5-JP8, LD1-LD4, L1, L2, B1, B2, X2, X3, CN1, CN5-CN10) are EmbSIM's", - "JP8's factory position (1-2): VREF+ from a TL1431CL5T shunt reference at 3.25 V; the catalog has no shunt reference yet, so JP8 stands on 2-3 (VDD)", - "LD2's transistor driver: PA5 drives LD2 through its resistor itself, so LD2's current flows through VDD (and JP6's ammeter), which on the board it does not", - "U4's current negotiation with the host (100 mA before the enumeration, 500 mA after it), the STLINK-V3E's own supply and current", - "the decoupling is DS12288's recommended scheme (figure 16: 100 nF per VDD pin and 4.7 uF, 10 nF and 1 uF on VDDA, 100 nF and 1 uF on VREF+), not checked against MB1367's own capacitors; ESD protection", + "Q1 and Q2 (BSR14) are the catalog's P2N2222A, the same die in another package; L1 and L2 the catalog's ferrite bead (600 ohm at 100 MHz as the schematic names them, its default DC resistance); X2's motional values the catalog's 32.768 kHz crystal's; the crystals' load capacitors (C56, C57, C58, C59) are not parts", + "the capacitors are ideal, without ESR or ESL, except C11 and C41 on the board's inputs (U5V, VIN), given a ceramic's 10 mOhm: the schematic gives no dielectric or series resistance", + "T_PWR_EN: the STLINK-V3E's output is a stand-in driving U4's EN high from 5V_USB_CHGR; U4's current negotiation with the host (100 mA before the enumeration, 500 mA after it) is not modelled", + "the ESD protection (U6, U8, U9, U10) and the STLINK-V3E's own parts on sheet 7", "the STM32's supply current: VDD carries only what the pins drive" ], "validation": [ @@ -1875,18 +2122,21 @@ "license": "Apache-2.0", "sources": [ { - "title": "UM2505 STM32G4 Nucleo-64 boards (MB1367) user manual", - "rev": "7", + "title": "UM2505 STM32G4 Nucleo-64 boards (MB1367) user manual: JP5's positions, JP6, the regulators U11 and U12, LD1-LD3, as its search excerpts give them", "url": "https://www.st.com/resource/en/user_manual/um2505-stm32g4-nucleo64-boards-mb1367-stmicroelectronics.pdf" }, { - "title": "STM32CubeG4's NUCLEO-G474RE projects (BSD-3-Clause): HSE_VALUE 24 MHz, LPUART1 on PA2/PA3 (AF12) as the VCP, B1's falling edge (GPIO_EXTI, EXTI_ToggleLedOnIT)" + "title": "MB1367 D-01 electrical schematics (NUCLEO64 STM32G4, variant G474RE, 26 Sep 2025): every part, value and designator modelled here", + "url": "https://www.st.com/resource/en/schematic_pack/mb1367-g474re-d01-schematic.pdf" + }, + { + "title": "Zephyr's nucleo_g474re board files (Apache-2.0): the LEDs, B1, the console, the Arduino and morpho connectors' pin assignment" }, { "title": "ST community, 'NUCLEO-G474RE: what is the intended use of JP7' (2019): the board ships with nSWBOOT0 0, PB8 an ordinary I/O; JP7 pulls BOOT0/PB8 down" }, { - "title": "Zephyr's nucleo_g474re board files (Apache-2.0), against which the connectors' assignment was checked" + "title": "STM32CubeG4's NUCLEO-G474RE projects (BSD-3-Clause): HSE_VALUE 24 MHz, LPUART1 on PA2/PA3 (AF12) as the VCP, the BSP's B1 (rising edge, pull-down)" } ], "notes": "Artwork is an original SVG drawn for EmbSIM to the Nucleo-64's 70 x 82.5 mm outline; no ST artwork or logo is used." @@ -1894,39 +2144,38 @@ "tests": [ "tests/*.json" ], - "i18n": { - "fr": { - "source": "5f7a554a8554", - "description": "La NUCLEO-G474RE de ST (MB1367) : un STM32G474RET6 avec le quartz HSE X3 de 24 MHz et le quartz LSE X2 de 32,768 kHz, la LED utilisateur verte LD2 sur PA5, le bouton bleu USER sur PC13, le bouton noir RESET, la LED d'alimentation verte LD3, JP5 choisissant l'USB du STLINK-V3E, VIN, E5V ou un chargeur USB, JP6 (IDD) pour mesurer le courant du MCU, les connecteurs Arduino Uno V3 et les deux connecteurs morpho ST. Le port COM virtuel du STLINK-V3E est la console série de la session sur le LPUART1 (PA2/PA3), et un port série sur l'hôte (embsim serve --serial).", - "fidelity": { - "functional": { - "claims": "Réseaux, ports, LD2, LD3, B1, B2 et les cavaliers comme composants ; le STM32G474RE exécute son micrologiciel (voir sa description), son HSE le quartz X3 de 24 MHz (HSEBYP à 0, comme sur la vraie carte) et son LSE le quartz X2 ; ses octets d'option tels que ST livre la carte (nSWBOOT0 à 0, nBOOT0 à 1 : il démarre sur sa flash quel que soit PB8). Les connecteurs Arduino suivent l'affectation de l'UM2505 (D0/D1 sur PC5/PC4, l'USART1) et les connecteurs morpho CN7 et CN10 chaque broche qu'ils portent. Le port COM virtuel du STLINK-V3E est la console de la session sur le LPUART1 (PA2/PA3) et un port série sur l'hôte.", - "omissions": [ - "le STLINK-V3E lui-même : son énumération USB (0483:374E), la programmation par glisser-déposer sur stockage de masse, le SWD et sa commande de NRST, LD1 (COM) ; la session programme et débogue la carte (ADR-031)", - "les octets du VCP arrivent directement au LPUART1, pas comme des trames sur PA3", - "les 41 ponts de soudure sont figés dans leur état d'usine tel que le donne la table 12 de l'UM2505 (PA2/PA3 sur le VCP, PC4/PC5 sur D1/D0 et les broches 35 et 37 de CN10, PB8 sur D15 et la broche 7 de CN7, B1 sur PC13, les quartz sur PF0/PF1 et PC14/PC15 et pas sur les connecteurs morpho)", - "un seul cavalier JP5 ne tient que sur une position ; les quatre interrupteurs ici peuvent tous être fermés", - "la BSP de ST (stm32g4xx_nucleo.c) configure B1 sur un front montant avec un tirage vers le bas ; sur cette carte (un tirage externe vers le haut, un appui tirant PC13 au niveau bas) cette BSP voit l'appui au relâchement de B1, comme elle le ferait sur le banc" - ] - }, - "timed": { - "claims": "Comme le niveau fonctionnel.", - "omissions": [ - "comme le niveau fonctionnel" - ] - }, - "electrical": { - "claims": "Les chemins d'alimentation de l'UM2505 7.4 : le 5 V de l'USB du STLINK-V3E (U5V) par U4 (STMPS2151STR, activé par T_PWR_EN comme après l'énumération ; LD4 sur sa sortie de défaut) et les broches 1-2 de JP5 vers +5V ; VIN (7 à 12 V) par U11 (LD1117S50) et les broches 3-4 de JP5 ; E5V par les broches 5-6 ; la position chargeur USB (broches 7-8) directement depuis le VBUS de CN1 ; U12 (LD39050PU33R) fait le +3,3V et JP6 (IDD) le porte vers VDD et VBAT, vers VDDA par la ferrite L1 et vers VREF+ par JP8 et la ferrite L2. LD3 indique le +5V, LD2 est allumée par PA5, un tirage vers le haut tient PC13 au niveau haut et B1 le tire à la masse avec un condensateur sur PC13, les 100 nF sur NRST le tiennent bas à la mise sous tension face au tirage interne du STM32 ; X3 (NX2016SA 24 MHz) et X2 (NX3215SA 32,768 kHz) sont les circuits équivalents de quartz.", - "omissions": [ - "le schéma de la MB1367 n'était pas sous la main : les résistances des LED, le réseau de B1, le tirage de JP7, la commande de T_PWR_EN et les valeurs des ferrites sont supposés ; les repères autres que ceux de l'UM2505 (U4, U11, U12, JP5-JP8, LD1-LD4, L1, L2, B1, B2, X2, X3, CN1, CN5-CN10) sont ceux d'EmbSIM", - "la position d'usine de JP8 (1-2) : VREF+ fourni par une référence shunt TL1431CL5T à 3,25 V ; le catalogue n'a pas encore de référence shunt, JP8 est donc sur 2-3 (VDD)", - "le transistor qui pilote LD2 : PA5 pilote LD2 lui-même à travers sa résistance, si bien que le courant de LD2 passe par VDD (et l'ampèremètre de JP6), ce qui n'est pas le cas sur la carte", - "la négociation de courant d'U4 avec l'hôte (100 mA avant l'énumération, 500 mA après), la propre alimentation du STLINK-V3E et son courant", - "le découplage suit le schéma recommandé du DS12288 (figure 16 : 100 nF par broche VDD et 4,7 µF, 10 nF et 1 µF sur VDDA, 100 nF et 1 µF sur VREF+), non vérifié sur les condensateurs propres à la MB1367 ; la protection ESD", - "le courant d'alimentation du STM32 : VDD ne porte que ce que pilotent les broches" - ] - } - } + "i18n": { + "fr": { + "source": "a9ed9fef708f", + "description": "La NUCLEO-G474RE de ST (MB1367) : un STM32G474RET6 avec le quartz HSE X3 de 24 MHz et le quartz LSE X2 de 32,768 kHz, la LED utilisateur verte LD2 sur PA5, le bouton bleu USER, actif au niveau haut, sur PC13, le bouton noir RESET, la LED d'alimentation verte LD3, JP5 choisissant l'USB du STLINK-V3E, VIN, E5V ou un chargeur USB, JP6 (IDD) pour mesurer le courant du MCU, les connecteurs Arduino Uno V3 et les deux connecteurs morpho ST. Le port COM virtuel du STLINK-V3E est la console s\u00e9rie de la session sur le LPUART1 (PA2/PA3), et un port s\u00e9rie sur l'h\u00f4te (embsim serve --serial).", + "fidelity": { + "functional": { + "claims": "R\u00e9seaux, ports, LD2 \u00e0 LD4, B1, B2 et les cavaliers comme composants, tels que les dessine le sch\u00e9ma de la MB1367 D-01 ; le STM32G474RE (U13) ex\u00e9cute son micrologiciel (voir sa description), son HSE le quartz X3 de 24 MHz (HSEBYP \u00e0 0, comme sur la vraie carte) et son LSE le quartz X2 ; ses octets d'option tels que ST livre la carte (nSWBOOT0 \u00e0 0, nBOOT0 \u00e0 1 : il d\u00e9marre sur sa flash quel que soit PB8). Les connecteurs Arduino suivent l'affectation de l'UM2505 (D0/D1 sur PC5/PC4, l'USART1) et les connecteurs morpho CN7 et CN10 chaque broche qu'ils portent avec les ponts de soudure d'usine. Le port COM virtuel du STLINK-V3E est la console de la session sur le LPUART1 (PA2/PA3) et un port s\u00e9rie sur l'h\u00f4te.", + "omissions": [ + "le STLINK-V3E lui-m\u00eame (U5 de la feuille 7, un STM32F723IEK6) : son \u00e9num\u00e9ration USB (0483:374E), la programmation par glisser-d\u00e9poser sur stockage de masse, le SWD et sa commande de NRST, LD1 (COM), sa propre alimentation (U7, D1 \u00e0 D3) ; la session programme et d\u00e9bogue la carte (ADR-031)", + "les octets du VCP arrivent directement au LPUART1, pas comme des trames sur PA3", + "les 41 ponts de soudure sont fig\u00e9s dans leur \u00e9tat d'usine tel que le donnent la table 12 de l'UM2505 et le sch\u00e9ma (PA2/PA3 sur le VCP, PC4/PC5 sur D1/D0 et les broches 35 et 37 de CN10, PB8 sur D15 et la broche 7 de CN7, B1 sur PC13, les quartz sur PF0/PF1 et PC14/PC15 et pas sur les connecteurs morpho)", + "un seul cavalier JP5 ou JP8 ne tient que sur une position ; les interrupteurs ici peuvent tous \u00eatre ferm\u00e9s", + "les exemples de CubeG4 qui prennent le front descendant de B1 (GPIO_EXTI et des exemples LL comme EXTI_ToggleLedOnIT_Init) agissent au rel\u00e2chement de B1, comme ils le feraient sur la carte : B1 est actif au niveau haut, leur readme parle d'un appui" + ] + }, + "timed": { + "claims": "Comme le niveau fonctionnel.", + "omissions": [ + "comme le niveau fonctionnel" + ] + }, + "electrical": { + "claims": "Les chemins d'alimentation des feuilles 4, 6 et 7 de la MB1367 D-01 : le VBUS de CN1 (5V_USB_CHGR) par U4 (STMPS2151STR, son EN sur T_PWR_EN avec le tirage vers le bas de R8, mis au niveau haut comme apr\u00e8s l'\u00e9num\u00e9ration ; LD4 avec R1 sur sa sortie FAULT) vers 5V_USB_STLK et les broches 1-2 de JP5 vers +5V ; VIN (7 \u00e0 12 V) par U11 (LD1117S50, C41 et C38) et les broches 3-4 de JP5 ; E5V par les broches 5-6 ; 5V_USB_CHGR directement par les broches 7-8 ; U12 (LD39050PU33R, C36 \u00e0 C40) fait le +3,3V et JP6 (IDD) le porte vers VDD (C55, C45, C54, C42, C52) et VBAT (C53), vers VDDA par la ferrite L1 (C43, C44) ; VREF fourni par U14 (TL1431CL5T) et Q2 (BSR14) \u00e0 2,5 x (1 + R33 / R34) = 3,26 V avec R35, C51, C50 et C46, vers VREF+ par JP8 (broches 1-2, la position d'usine), C47 et la ferrite L2 (C48, C49). LD3 indique le +5V par R7 ; LD2 est commut\u00e9e par Q1 depuis le 3V3 \u00e0 travers R25 (510 ohms), sa base pilot\u00e9e par PA5 \u00e0 travers R29 (47 kohms) face \u00e0 R28 (100 kohms), si bien que le courant de LD2 ne vient pas de VDD ; B1 relie son n\u0153ud \u00e0 VDD, R26 (100 kohms) le tient bas, R27 (330 ohms) le porte vers PC13 o\u00f9 se trouve C35 (100 nF) ; C34 (100 nF) tient NRST bas \u00e0 la mise sous tension face au tirage interne du STM32 ; JP7 (non mont\u00e9) et R31 tirent BOOT0/PB8 vers le bas ; X3 (NX2016SA 24 MHz) et X2 (NX3215SA 32,768 kHz) sont les circuits \u00e9quivalents de quartz.", + "omissions": [ + "Q1 et Q2 (BSR14) sont le P2N2222A du catalogue, la m\u00eame puce dans un autre bo\u00eetier ; L1 et L2 la ferrite du catalogue (600 ohms \u00e0 100 MHz comme le sch\u00e9ma les nomme, sa r\u00e9sistance continue par d\u00e9faut) ; les valeurs motionnelles de X2 celles du quartz de 32,768 kHz du catalogue ; les condensateurs de charge des quartz (C56, C57, C58, C59) ne sont pas des composants", + "les condensateurs sont id\u00e9aux, sans ESR ni ESL, sauf C11 et C41 sur les entr\u00e9es de la carte (U5V, VIN), dot\u00e9s des 10 mohms d'un c\u00e9ramique : le sch\u00e9ma ne donne ni di\u00e9lectrique ni r\u00e9sistance s\u00e9rie", + "T_PWR_EN : la sortie du STLINK-V3E est remplac\u00e9e par une commande mettant l'EN d'U4 au niveau haut depuis 5V_USB_CHGR ; la n\u00e9gociation de courant d'U4 avec l'h\u00f4te (100 mA avant l'\u00e9num\u00e9ration, 500 mA apr\u00e8s) n'est pas mod\u00e9lis\u00e9e", + "la protection ESD (U6, U8, U9, U10) et les composants propres au STLINK-V3E de la feuille 7", + "le courant d'alimentation du STM32 : VDD ne porte que ce que pilotent les broches" + ] } + } } + } } diff --git a/catalog/boards/nucleo_g474re/tests/ld2-q1.json b/catalog/boards/nucleo_g474re/tests/ld2-q1.json new file mode 100644 index 000000000..a0952bf74 --- /dev/null +++ b/catalog/boards/nucleo_g474re/tests/ld2-q1.json @@ -0,0 +1,78 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "ld2-q1", + "description": "LD2 is switched by Q1: 3.3 V on D13 (PA5) from 5 ms lights LD2 from 3V3 through R25, the base driven through R29 against R28 (usb-powered checks LD2 dark).", + "policy": "electrical", + "until": "20ms", + "circuit": { + "boards": [ + { + "id": "B1", + "board": "emblink/nucleo_g474re" + } + ], + "components": [ + { + "id": "HOST", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5.0 + } + }, + { + "id": "CABLE", + "component": "emblink/resistor", + "params": { + "resistance": 0.25 + } + }, + { + "id": "G", + "component": "emblink/gnd" + }, + { + "id": "PA5", + "component": "emblink/vsource", + "params": { + "kind": "pulse", + "v1": 0, + "v2": 3.3, + "td": "5m", + "tr": "1u", + "tf": "1u", + "pw": "10m", + "per": "40m" + } + } + ], + "nets": { + "HOSTV": [ + "HOST.+", + "CABLE.1" + ], + "VBUS": [ + "CABLE.2", + "B1.U5V" + ], + "GND": [ + "HOST.-", + "G.GND", + "B1.GND", + "PA5.-" + ], + "D13": [ + "PA5.+", + "B1.D13" + ] + } + }, + "inputs": [], + "expect": { + "output:B1.LD2.luminance": { + "at": "10ms", + "min": 0.05 + } + } +} diff --git a/catalog/boards/nucleo_g474re/tests/usb-powered.json b/catalog/boards/nucleo_g474re/tests/usb-powered.json index 6e573331a..3ac9ea0e4 100644 --- a/catalog/boards/nucleo_g474re/tests/usb-powered.json +++ b/catalog/boards/nucleo_g474re/tests/usb-powered.json @@ -2,9 +2,9 @@ "schema_version": 1, "kind": "component_test", "name": "usb-powered", - "description": "Plugged into a computer's USB port through a 0.25 ohm cable, JP5 on STLK (the factory position): +5V from the STLINK-V3E's USB, LD3 lights, U12 makes +3.3V and JP6 carries it to VDD, VBAT and VDDA; PC13 (B1 released) is high and PB8 (D15) floats with JP7 not fitted.", + "description": "Plugged into a computer's USB port through a 0.25 ohm cable, JP5 on STLK (the factory position): +5V from the STLINK-V3E's USB, LD3 lights, U12 makes +3.3V and JP6 carries it to VDD and VBAT; U14 and Q2 make VREF and JP8 (pins 1-2) carries it to VREF+ (AREF), 2.5 x (1 + 10k / 33k) = 3.26 V once it has settled (R33 and R34 alone discharge C46 after the start-up's overshoot); PC13 (B1 released) is held low by R26, LD2 is dark with PA5 not driven (R28 holds Q1's base low) and PB8 (D15) floats with JP7 not fitted.", "policy": "electrical", - "until": "20ms", + "until": "31ms", "circuit": { "boards": [ { @@ -56,14 +56,14 @@ "VDD": [ "B1.CN7_5" ], - "AVDD": [ - "B1.AREF" - ], "VBAT": [ "B1.CN7_33" ], "BTN": [ "B1.CN7_23" + ], + "VREFP": [ + "B1.AREF" ] } }, @@ -84,11 +84,6 @@ "min_v": 3.25, "max_v": 3.35 }, - "net:AVDD": { - "at": "10ms", - "min_v": 3.25, - "max_v": 3.35 - }, "net:VBAT": { "at": "10ms", "min_v": 3.25, @@ -100,8 +95,16 @@ }, "net:BTN": { "at": "10ms", - "min_v": 3.25, - "max_v": 3.35 + "max_v": 0.05 + }, + "net:VREFP": { + "at": "30ms", + "min_v": 3.24, + "max_v": 3.28 + }, + "output:B1.LD2.luminance": { + "at": "10ms", + "max": 0.001 } } } diff --git a/catalog/boards/nucleo_g474re/tests/user-button.json b/catalog/boards/nucleo_g474re/tests/user-button.json index 4aa691da4..9aed87ad6 100644 --- a/catalog/boards/nucleo_g474re/tests/user-button.json +++ b/catalog/boards/nucleo_g474re/tests/user-button.json @@ -2,7 +2,7 @@ "schema_version": 1, "kind": "component_test", "name": "user-button", - "description": "B1 (USER) pulls PC13 to ground through 100 ohm while pressed, against the 4.7 kOhm pull-up: about 69 mV (usb-powered checks the idle level).", + "description": "B1 (USER) joins its node to VDD while pressed; with R27 (330 ohm) to PC13 and nothing loading it, PC13 reads VDD (usb-powered checks the released level, R26 holding it low).", "policy": "electrical", "until": "20ms", "circuit": { @@ -63,8 +63,8 @@ "expect": { "net:BTN": { "at": "15ms", - "min_v": 0.055, - "max_v": 0.085 + "min_v": 3.25, + "max_v": 3.35 } } } diff --git a/catalog/components/bsr14/component.json b/catalog/components/bsr14/component.json new file mode 100644 index 000000000..34b903270 --- /dev/null +++ b/catalog/components/bsr14/component.json @@ -0,0 +1,192 @@ +{ + "schema_version": 1, + "kind": "component", + "id": "emblink/bsr14", + "version": "1.0.0", + "name": "BSR14 NPN switching transistor", + "category": "transistors", + "subcategory": "bipolar_npn", + "description": "A BSR14 (marked U8), the 2N2222A's die (Fairchild's process 19) in SOT-23: a 40 V, 800 mA NPN for medium-power switching and amplification. The NUCLEO-G474RE's (MB1367) Q1, LD2's low-side switch, and Q2, the emitter follower of its VREF+ supply.", + "keywords": [ + "bjt", + "npn", + "transistor", + "bsr14", + "2n2222a", + "process 19", + "sot-23", + "nucleo" + ], + "pins": [ + { + "name": "B", + "number": 1, + "model": { + "kind": "analog" + }, + "doc": "Base (SOT-23 pin 1)" + }, + { + "name": "E", + "number": 2, + "model": { + "kind": "analog" + }, + "doc": "Emitter (pin 2)" + }, + { + "name": "C", + "number": 3, + "model": { + "kind": "analog" + }, + "doc": "Collector (pin 3)" + } + ], + "params": {}, + "model": { + "composite": { + "components": [ + { + "id": "Q", + "component": "emblink/bjt_npn", + "params": { + "part": "generic", + "is": "14.34f", + "bf": 255.9, + "br": 6.092, + "vaf": 74.03, + "rb": 10, + "rc": 1, + "cje": "22.01p", + "vje": 0.75, + "mje": 0.377, + "cjc": "7.306p", + "vjc": 0.75, + "mjc": 0.3416, + "fc": 0.5, + "tf": "411.1p", + "tr": "46.91n", + "bvcbo": 75, + "bvebo": 6 + } + } + ], + "nets": {}, + "ports": { + "B": "Q.B", + "E": "Q.E", + "C": "Q.C" + } + } + }, + "functional": { + "composite": { + "components": [], + "nets": {}, + "ports": {} + } + }, + "symbol": { + "svg": "symbol.svg", + "width": 60, + "height": 80, + "pins": { + "B": { + "x": 0, + "y": 40, + "side": "left" + }, + "C": { + "x": 40, + "y": 0, + "side": "top" + }, + "E": { + "x": 40, + "y": 80, + "side": "bottom" + } + } + }, + "fidelity": { + "functional": { + "claims": "Pins only: the functional policy has no base currents.", + "omissions": [ + "switching" + ], + "validation": [ + "tests/*.json" + ] + }, + "timed": { + "claims": "As electrical.", + "omissions": [] + }, + "electrical": { + "claims": "The datasheet's SPICE model (IS 14.34 fA, BF 255.9, BR 6.092, VAF 74.03 V, RB 10 ohm, RC 1 ohm, CJE 22.01 pF, CJC 7.306 pF with their grading, TF 411.1 ps, TR 46.91 ns) in the catalog's Ebers-Moll transistor with the Early effect and charge storage, the collector-base and emitter-base breakdowns at the ratings (75 V, 6 V); fixtures on the datasheet's VCE(sat) and VBE(sat) at 150 mA and 500 mA, and on MB1367's LD2 circuit.", + "omissions": [ + "the model's ISE, NE and IKF: the gain does not fall at low or high current (the datasheet's minimum hFE is 35 at 0.1 mA and 40 at 500 mA; the model's stays near 256)", + "temperature (XTI, EG, XTB): VBE's drift and the gain's rise", + "the SOT-23's pin numbers are the package's usual 1 B, 2 E, 3 C: the datasheet's outline draws the pins without numbers", + "the thermal limits (350 mW, 357 C/W on FR-4), the safe operating area and damage past the ratings", + "device-to-device spread within the datasheet's limits" + ], + "range": { + "voltage_v": [ + -6, + 40 + ], + "current_a": [ + -0.8, + 0.8 + ] + }, + "validation": [ + "tests/*.json" + ] + } + }, + "provenance": { + "author": "EmbSIM", + "license": "Apache-2.0", + "sources": [ + { + "title": "onsemi (Fairchild) BSR14 NPN General Purpose Amplifier datasheet, Rev. B0, September 2012: ratings, electrical characteristics and the SPICE model", + "url": "https://www.onsemi.com/download/data-sheet/pdf/bsr14-d.pdf", + "date": "2026-11-13", + "hash": "sha256:74685954721282967bb81c75fe87ad8805cb0201055cf0024fa1687029f1db32" + } + ] + }, + "tests": [ + "tests/*.json" + ], + "i18n": { + "fr": { + "source": "984e1fa77266", + "description": "Un BSR14 (marqué U8), la puce du 2N2222A (le procédé 19 de Fairchild) en SOT-23 : un NPN de 40 V et 800 mA pour la commutation et l'amplification de moyenne puissance. Le Q1 de la NUCLEO-G474RE (MB1367), l'interrupteur côté bas de LD2, et son Q2, le collecteur commun de son alimentation VREF+.", + "fidelity": { + "functional": { + "claims": "Les broches seulement : la politique fonctionnelle n'a pas de courants de base.", + "omissions": [ + "la commutation" + ] + }, + "timed": { + "claims": "Comme le niveau électrique." + }, + "electrical": { + "claims": "Le modèle SPICE de la fiche technique (IS 14,34 fA, BF 255,9, BR 6,092, VAF 74,03 V, RB 10 ohms, RC 1 ohm, CJE 22,01 pF, CJC 7,306 pF avec leur gradation, TF 411,1 ps, TR 46,91 ns) dans le transistor d'Ebers-Moll du catalogue avec l'effet Early et le stockage de charge, les claquages collecteur-base et émetteur-base aux valeurs maximales (75 V, 6 V) ; des fixtures sur le VCE(sat) et le VBE(sat) de la fiche technique à 150 mA et 500 mA, et sur le circuit de LD2 de la MB1367.", + "omissions": [ + "l'ISE, le NE et l'IKF du modèle : le gain ne baisse pas à faible ou fort courant (le hFE minimal de la fiche technique est de 35 à 0,1 mA et de 40 à 500 mA ; celui du modèle reste proche de 256)", + "la température (XTI, EG, XTB) : la dérive de VBE et la hausse du gain", + "les numéros de broche du SOT-23 sont les habituels du boîtier, 1 B, 2 E, 3 C : le dessin de la fiche technique montre les broches sans numéros", + "les limites thermiques (350 mW, 357 C/W sur FR-4), l'aire de sécurité et les dégâts au-delà des valeurs maximales", + "la dispersion d'un composant à l'autre dans les limites de la fiche technique" + ] + } + } + } + } +} diff --git a/catalog/components/bsr14/symbol.svg b/catalog/components/bsr14/symbol.svg new file mode 100644 index 000000000..2feae29d4 --- /dev/null +++ b/catalog/components/bsr14/symbol.svg @@ -0,0 +1,2 @@ + + diff --git a/catalog/components/bsr14/tests/ld2.json b/catalog/components/bsr14/tests/ld2.json new file mode 100644 index 000000000..4bb83dea0 --- /dev/null +++ b/catalog/components/bsr14/tests/ld2.json @@ -0,0 +1,93 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "ld2", + "description": "MB1367's LD2 driver: 3.3 V on the base through R29 (47 kOhm) against R28 (100 kOhm), LD2 (green) and R25 (510 ohm) from 3.3 V: the transistor saturates and LD2 lights.", + "policy": "electrical", + "until": "2ms", + "circuit": { + "components": [ + { + "id": "G0", + "component": "emblink/gnd" + }, + { + "id": "DUT", + "component": "emblink/bsr14" + }, + { + "id": "V3", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 3.3 + } + }, + { + "id": "R29", + "component": "emblink/resistor", + "params": { + "resistance": 47000 + } + }, + { + "id": "R28", + "component": "emblink/resistor", + "params": { + "resistance": 100000 + } + }, + { + "id": "R25", + "component": "emblink/resistor", + "params": { + "resistance": 510 + } + }, + { + "id": "LD2", + "component": "emblink/led", + "params": { + "color": "green" + } + } + ], + "nets": { + "V3N": [ + "V3.+", + "R29.1", + "R25.1" + ], + "B": [ + "R29.2", + "R28.1", + "DUT.B" + ], + "A": [ + "R25.2", + "LD2.A" + ], + "C": [ + "LD2.K", + "DUT.C" + ], + "GND": [ + "V3.-", + "R28.2", + "DUT.E", + "G0.GND" + ] + } + }, + "inputs": [], + "expect": { + "net:C": { + "at": "1ms", + "max_v": 0.1 + }, + "output:LD2.luminance": { + "at": "1ms", + "min": 0.05 + } + } +} diff --git a/catalog/components/bsr14/tests/off.json b/catalog/components/bsr14/tests/off.json new file mode 100644 index 000000000..516952ca4 --- /dev/null +++ b/catalog/components/bsr14/tests/off.json @@ -0,0 +1,69 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "off", + "description": "No base drive (the base held at ground through 100 kOhm): the transistor is off and the collector sits at 5 V through 330 ohm.", + "policy": "electrical", + "until": "2ms", + "circuit": { + "components": [ + { + "id": "G0", + "component": "emblink/gnd" + }, + { + "id": "DUT", + "component": "emblink/bsr14" + }, + { + "id": "VC", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5.0 + } + }, + { + "id": "RC", + "component": "emblink/resistor", + "params": { + "resistance": 330 + } + }, + { + "id": "RBE", + "component": "emblink/resistor", + "params": { + "resistance": 100000 + } + } + ], + "nets": { + "VCN": [ + "VC.+", + "RC.1" + ], + "C": [ + "RC.2", + "DUT.C" + ], + "GND": [ + "VC.-", + "DUT.E", + "RBE.2", + "G0.GND" + ], + "B": [ + "RBE.1", + "DUT.B" + ] + } + }, + "inputs": [], + "expect": { + "net:C": { + "at": "1ms", + "min_v": 4.99 + } + } +} diff --git a/catalog/components/bsr14/tests/sat-150ma.json b/catalog/components/bsr14/tests/sat-150ma.json new file mode 100644 index 000000000..08948ab76 --- /dev/null +++ b/catalog/components/bsr14/tests/sat-150ma.json @@ -0,0 +1,74 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "sat-150ma", + "description": "The datasheet's saturation point: about 150 mA from 5 V through 30 ohm, 15 mA into the base through 270 ohm: VCE(sat) at most 0.3 V and VBE(sat) 0.6 to 1.2 V.", + "policy": "electrical", + "until": "2ms", + "circuit": { + "components": [ + { + "id": "G0", + "component": "emblink/gnd" + }, + { + "id": "DUT", + "component": "emblink/bsr14" + }, + { + "id": "VC", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5.0 + } + }, + { + "id": "RC", + "component": "emblink/resistor", + "params": { + "resistance": 30 + } + }, + { + "id": "RB", + "component": "emblink/resistor", + "params": { + "resistance": 270 + } + } + ], + "nets": { + "VCN": [ + "VC.+", + "RC.1", + "RB.1" + ], + "C": [ + "RC.2", + "DUT.C" + ], + "B": [ + "RB.2", + "DUT.B" + ], + "GND": [ + "VC.-", + "DUT.E", + "G0.GND" + ] + } + }, + "inputs": [], + "expect": { + "net:C": { + "at": "1ms", + "max_v": 0.3 + }, + "net:B": { + "at": "1ms", + "min_v": 0.6, + "max_v": 1.2 + } + } +} diff --git a/catalog/components/bsr14/tests/sat-500ma.json b/catalog/components/bsr14/tests/sat-500ma.json new file mode 100644 index 000000000..9b74fc42e --- /dev/null +++ b/catalog/components/bsr14/tests/sat-500ma.json @@ -0,0 +1,73 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "sat-500ma", + "description": "The datasheet's second saturation point: about 500 mA from 5 V through 9.1 ohm, 50 mA into the base through 82 ohm: VCE(sat) at most 1.0 V and VBE(sat) at most 2.0 V.", + "policy": "electrical", + "until": "2ms", + "circuit": { + "components": [ + { + "id": "G0", + "component": "emblink/gnd" + }, + { + "id": "DUT", + "component": "emblink/bsr14" + }, + { + "id": "VC", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5.0 + } + }, + { + "id": "RC", + "component": "emblink/resistor", + "params": { + "resistance": 9.1 + } + }, + { + "id": "RB", + "component": "emblink/resistor", + "params": { + "resistance": 82 + } + } + ], + "nets": { + "VCN": [ + "VC.+", + "RC.1", + "RB.1" + ], + "C": [ + "RC.2", + "DUT.C" + ], + "B": [ + "RB.2", + "DUT.B" + ], + "GND": [ + "VC.-", + "DUT.E", + "G0.GND" + ] + } + }, + "inputs": [], + "expect": { + "net:C": { + "at": "1ms", + "max_v": 1.0 + }, + "net:B": { + "at": "1ms", + "max_v": 2.0 + } + } +} diff --git a/catalog/components/tl1431cl5t/component.json b/catalog/components/tl1431cl5t/component.json new file mode 100644 index 000000000..657cf8e4e --- /dev/null +++ b/catalog/components/tl1431cl5t/component.json @@ -0,0 +1,294 @@ +{ + "schema_version": 1, + "kind": "component", + "id": "emblink/tl1431cl5t", + "version": "1.0.0", + "name": "TL1431CL5T programmable shunt voltage reference", + "category": "analog_ics", + "subcategory": "voltage_references", + "description": "STMicroelectronics TL1431CL5T, a programmable shunt voltage reference (2.500 V, C grade) in SOT23-5L: between its cathode and anode it sinks what keeps REF at its reference, so two resistors set any voltage from VREF to 36 V. The NUCLEO-G474RE's (MB1367) U14, the reference of its VREF+ supply.", + "keywords": [ + "voltage reference", + "shunt reference", + "programmable", + "tl1431", + "tl431", + "tl1431cl5t", + "stmicroelectronics", + "sot23-5", + "nucleo" + ], + "pins": [ + { + "name": "NC1", + "number": 1, + "model": { + "kind": "nc" + }, + "required": false, + "doc": "Not connected (SOT23-5L pin 1)" + }, + { + "name": "NC2", + "number": 2, + "model": { + "kind": "nc" + }, + "required": false, + "doc": "Not connected (SOT23-5L pin 2)" + }, + { + "name": "CATHODE", + "number": 3, + "model": { + "kind": "analog" + }, + "doc": "Cathode (SOT23-5L pin 3): the shunt's input" + }, + { + "name": "REF", + "number": 4, + "model": { + "kind": "analog" + }, + "doc": "Reference input (SOT23-5L pin 4): held at VREF above the anode while the part regulates" + }, + { + "name": "ANODE", + "number": 5, + "model": { + "kind": "analog" + }, + "doc": "Anode (SOT23-5L pin 5), normally ground" + } + ], + "params": {}, + "model": { + "composite": { + "components": [ + { + "id": "VR", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 2.5045 + } + }, + { + "id": "EA", + "component": "emblink/opamp", + "params": { + "gain": "450", + "gbw": "2meg", + "rin": "1T", + "vpos": 5 + } + }, + { + "id": "VB", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 0.8 + } + }, + { + "id": "RB", + "component": "emblink/resistor", + "params": { + "resistance": "100k" + } + }, + { + "id": "QD", + "component": "emblink/bjt_npn" + }, + { + "id": "Q", + "component": "emblink/bjt_npn" + }, + { + "id": "RQ", + "component": "emblink/resistor", + "params": { + "resistance": "200meg" + } + } + ], + "nets": { + "VREF_INT": [ + "VR.+", + "EA.-" + ], + "ANODE": [ + "VR.-", + "EA.V-", + "Q.E", + "RQ.2" + ], + "CATHODE": [ + "Q.C", + "QD.C", + "RQ.1" + ], + "DRIVE": [ + "EA.OUT", + "VB.-" + ], + "DBASE": [ + "RB.2", + "QD.B" + ], + "BASE": [ + "QD.E", + "Q.B" + ], + "BIAS": [ + "VB.+", + "RB.1" + ] + }, + "ports": { + "CATHODE": "Q.C", + "REF": "EA.+", + "ANODE": "Q.E" + } + } + }, + "functional": { + "composite": { + "components": [], + "nets": {}, + "ports": {} + } + }, + "symbol": { + "svg": "symbol.svg", + "width": 60, + "height": 60, + "pins": { + "CATHODE": { + "x": 30, + "y": 0, + "side": "top" + }, + "ANODE": { + "x": 30, + "y": 60, + "side": "bottom" + }, + "REF": { + "x": 0, + "y": 30, + "side": "left" + }, + "NC1": { + "x": 60, + "y": 20, + "side": "right" + }, + "NC2": { + "x": 60, + "y": 40, + "side": "right" + } + } + }, + "fidelity": { + "functional": { + "claims": "Pins only: the functional policy has no voltages.", + "omissions": [ + "regulation" + ], + "validation": [ + "tests/*.json" + ] + }, + "timed": { + "claims": "As electrical.", + "omissions": [] + }, + "electrical": { + "claims": "The shunt as the datasheet's block diagram (figure 5) draws it: an error amplifier comparing REF with an internal reference and driving a Darlington from the cathode to the anode, so the cathode current is what holds REF at VREF and VKA = VREF x (1 + R1 / R2) with a divider. The amplifier has the open-loop gain of figure 19 (53 dB, falling to unity near 2 MHz); the reference is trimmed, as the part is, so VREF is the C grade's typical 2.500 V (2.490 to 2.510 V) with the amplifier's offset included; from 5 mA to 83 mA it moves under 1 mV (the datasheet's |zKA| is 0.2 ohm typical); REF draws no current (IREF 1.5 uA typical); off (REF below VREF) the cathode passes the datasheet's Ioff through 200 MOhm (180 nA at 36 V); it regulates from about 0.5 mA (Imin 0.5 mA typical) to 100 mA; a 1 mA step brings the cathode to VREF within a microsecond (figure 22). Fixtures: VKA = VREF, a 3.25 V divider, the off state, 83 mA, figure 22's step. Inside: the amplifier, reference, the output stage's 0.8 V bias and two transistors are the catalog's primitives, with the same outside.", + "omissions": [ + "the error amplifier runs from a 5 V internal rail, not from the cathode: the Darlington's first base current (about 10 uA at 100 mA) comes from that rail through 100 kOhm, and with REF above VREF while the cathode is held below VREF the part sources up to about 50 uA out of its cathode, where the real part cannot", + "the step response has no internal capacitance: the cathode reaches VREF in under 0.2 us without figure 22's 0.6 us rise and overshoot", + "VREF's spread (2.490 to 2.510 V) and drift with temperature (3 to 20 mV over the range), and its change with VKA (-1.1 mV/V): VREF is the typical 2.500 V", + "IREF (1.5 uA) and its drift: REF draws no current", + "the minimum cathode current's own curve below Imin, the stability boundaries with a capacitive load (figure 20)", + "the thermal limits and damage (36 V, 100 mA)" + ], + "range": { + "voltage_v": [ + -0.3, + 37 + ], + "current_a": [ + -0.1, + 0.15 + ] + }, + "validation": [ + "tests/*.json" + ] + } + }, + "provenance": { + "author": "EmbSIM", + "license": "Apache-2.0", + "sources": [ + { + "title": "STMicroelectronics TL1431 programmable shunt voltage reference datasheet: SOT23-5L pin connections (figure 3), operating conditions, electrical characteristics (VREF, IREF, Imin, Ioff, |zKA|)", + "url": "https://www.st.com/resource/en/datasheet/tl1431.pdf", + "date": "2026-11-12" + }, + { + "title": "Texas Instruments TL1431 datasheet (SLVS062O): the same part's functional block diagram and characteristics", + "url": "https://www.ti.com/lit/ds/symlink/tl1431.pdf", + "date": "2026-11-12" + }, + { + "title": "MB1367 D-01 schematics (NUCLEO-G474RE), Main power sheet: U14 TL1431CL5T with Q2 BSR14, R33 10 kOhm, R34 33 kOhm, R35 180 ohm, C51 100 pF", + "url": "https://www.st.com/resource/en/schematic_pack/mb1367-g474re-d01-schematic.pdf", + "date": "2026-11-12" + } + ] + }, + "tests": [ + "tests/*.json" + ], + "part": { + "mpn": "TL1431CL5T", + "manufacturer": "STMicroelectronics", + "package": "SOT23-5L", + "datasheet": "https://www.st.com/resource/en/datasheet/tl1431.pdf" + }, + "i18n": { + "fr": { + "source": "1c3a119f0636", + "description": "Le TL1431CL5T de STMicroelectronics, une référence de tension shunt programmable (2,500 V, classe C) en SOT23-5L : entre sa cathode et son anode il absorbe ce qui tient REF à sa référence, si bien que deux résistances fixent toute tension de VREF à 36 V. L'U14 de la NUCLEO-G474RE (MB1367), la référence de son alimentation VREF+.", + "fidelity": { + "functional": { + "claims": "Les broches seulement : la politique fonctionnelle n'a pas de tensions.", + "omissions": [ + "la régulation" + ] + }, + "timed": { + "claims": "Comme le niveau électrique." + }, + "electrical": { + "claims": "Le shunt tel que le dessine le schéma fonctionnel de la fiche technique (figure 5) : un amplificateur d'erreur comparant REF à une référence interne et pilotant un Darlington de la cathode à l'anode, si bien que le courant de cathode est ce qui tient REF à VREF et que VKA = VREF x (1 + R1 / R2) avec un diviseur. L'amplificateur a le gain en boucle ouverte de la figure 19 (53 dB, tombant à l'unité vers 2 MHz) ; la référence est ajustée, comme sur le composant, si bien que VREF est la valeur typique de 2,500 V de la classe C (2,490 à 2,510 V), décalage de l'amplificateur compris ; de 5 mA à 83 mA elle varie de moins de 1 mV (le |zKA| de la fiche technique est de 0,2 ohm typique) ; REF ne consomme aucun courant (IREF 1,5 uA typique) ; bloqué (REF sous VREF), la cathode laisse passer l'Ioff de la fiche technique par 200 Mohms (180 nA à 36 V) ; il régule d'environ 0,5 mA (Imin 0,5 mA typique) à 100 mA ; un échelon de 1 mA amène la cathode à VREF en moins d'une microseconde (figure 22). Fixtures : VKA = VREF, un diviseur à 3,25 V, l'état bloqué, 83 mA, l'échelon de la figure 22. À l'intérieur : l'amplificateur, la référence, la polarisation de 0,8 V de l'étage de sortie et les deux transistors sont les primitives du catalogue, avec le même comportement vu de l'extérieur.", + "omissions": [ + "l'amplificateur d'erreur est alimenté par un rail interne de 5 V, pas par la cathode : le premier courant de base du Darlington (environ 10 uA à 100 mA) vient de ce rail à travers 100 kohms, et avec REF au-dessus de VREF pendant que la cathode est tenue sous VREF le composant fournit jusqu'à environ 50 uA par sa cathode, ce que le vrai composant ne peut pas faire", + "la réponse à un échelon n'a pas de capacité interne : la cathode atteint VREF en moins de 0,2 us, sans la montée de 0,6 us ni le dépassement de la figure 22", + "la dispersion de VREF (2,490 à 2,510 V), sa dérive en température (3 à 20 mV sur la plage) et sa variation avec VKA (-1,1 mV/V) : VREF est la valeur typique de 2,500 V", + "IREF (1,5 uA) et sa dérive : REF ne consomme aucun courant", + "la courbe propre du courant de cathode minimal sous Imin, les limites de stabilité avec une charge capacitive (figure 20)", + "les limites thermiques et les dégâts (36 V, 100 mA)" + ] + } + } + } + } +} diff --git a/catalog/components/tl1431cl5t/symbol.svg b/catalog/components/tl1431cl5t/symbol.svg new file mode 100644 index 000000000..cccfc7bcb --- /dev/null +++ b/catalog/components/tl1431cl5t/symbol.svg @@ -0,0 +1,2 @@ + +KAREFTL1431 diff --git a/catalog/components/tl1431cl5t/tests/divider-3v25.json b/catalog/components/tl1431cl5t/tests/divider-3v25.json new file mode 100644 index 000000000..2d626a05d --- /dev/null +++ b/catalog/components/tl1431cl5t/tests/divider-3v25.json @@ -0,0 +1,84 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "divider-3v25", + "description": "MB1367's VREF divider without its follower: R1 10 kOhm from the cathode to REF and R2 33 kOhm from REF to the anode, fed through 180 ohm from 5 V: VKA = 2.5 x (1 + 10/33) = 3.258 V.", + "policy": "electrical", + "until": "2ms", + "circuit": { + "components": [ + { + "id": "VS", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5.0 + } + }, + { + "id": "G0", + "component": "emblink/gnd" + }, + { + "id": "DUT", + "component": "emblink/tl1431cl5t" + }, + { + "id": "RS", + "component": "emblink/resistor", + "params": { + "resistance": 180 + } + }, + { + "id": "R1", + "component": "emblink/resistor", + "params": { + "resistance": "10k" + } + }, + { + "id": "R2", + "component": "emblink/resistor", + "params": { + "resistance": "33k" + } + } + ], + "nets": { + "IN": [ + "VS.+", + "RS.1" + ], + "K": [ + "RS.2", + "DUT.CATHODE", + "R1.1" + ], + "REF": [ + "R1.2", + "R2.1", + "DUT.REF" + ], + "GND": [ + "VS.-", + "DUT.ANODE", + "R2.2", + "G0.GND" + ] + } + }, + "inputs": [], + "expect": { + "net:K": { + "at": "1ms", + "min_v": 3.24, + "max_v": 3.28 + }, + "net:REF": { + "at": "1ms", + "min_v": 2.49, + "max_v": 2.51 + } + } +} \ No newline at end of file diff --git a/catalog/components/tl1431cl5t/tests/off.json b/catalog/components/tl1431cl5t/tests/off.json new file mode 100644 index 000000000..9d3e19f37 --- /dev/null +++ b/catalog/components/tl1431cl5t/tests/off.json @@ -0,0 +1,58 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "off", + "description": "REF at the anode, the cathode fed through 100 kOhm from 5 V: the part off, its cathode current under a microamp (Ioff 180 nA typical), the cathode near 5 V.", + "policy": "electrical", + "until": "2ms", + "circuit": { + "components": [ + { + "id": "VS", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5.0 + } + }, + { + "id": "G0", + "component": "emblink/gnd" + }, + { + "id": "DUT", + "component": "emblink/tl1431cl5t" + }, + { + "id": "RS", + "component": "emblink/resistor", + "params": { + "resistance": "100k" + } + } + ], + "nets": { + "IN": [ + "VS.+", + "RS.1" + ], + "K": [ + "RS.2", + "DUT.CATHODE" + ], + "GND": [ + "VS.-", + "DUT.ANODE", + "DUT.REF", + "G0.GND" + ] + } + }, + "inputs": [], + "expect": { + "net:K": { + "at": "1ms", + "min_v": 4.9 + } + } +} \ No newline at end of file diff --git a/catalog/components/tl1431cl5t/tests/pulse.json b/catalog/components/tl1431cl5t/tests/pulse.json new file mode 100644 index 000000000..42648758f --- /dev/null +++ b/catalog/components/tl1431cl5t/tests/pulse.json @@ -0,0 +1,65 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "pulse", + "description": "The datasheet's figure 22: REF tied to the cathode (figure 6's circuit), a 1 mA step from a 5 V pulse through 2.5 kOhm: within 1.5 us of the edge the cathode is at VREF (figure 22 rises in about 0.6 us and settles near 2.4 V).", + "policy": "electrical", + "until": "40us", + "circuit": { + "components": [ + { + "id": "VS", + "component": "emblink/vsource", + "params": { + "kind": "pulse", + "v1": 0, + "v2": 5, + "td": "10u", + "tr": "10n", + "tf": "10n", + "pw": "20u", + "per": "100u" + } + }, + { + "id": "G0", + "component": "emblink/gnd" + }, + { + "id": "DUT", + "component": "emblink/tl1431cl5t" + }, + { + "id": "RS", + "component": "emblink/resistor", + "params": { + "resistance": 2500 + } + } + ], + "nets": { + "IN": [ + "VS.+", + "RS.1" + ], + "K": [ + "RS.2", + "DUT.CATHODE", + "DUT.REF" + ], + "GND": [ + "VS.-", + "DUT.ANODE", + "G0.GND" + ] + } + }, + "inputs": [], + "expect": { + "net:K": { + "at": "11.5us", + "min_v": 2.3, + "max_v": 2.6 + } + } +} diff --git a/catalog/components/tl1431cl5t/tests/regulation.json b/catalog/components/tl1431cl5t/tests/regulation.json new file mode 100644 index 000000000..049242d3c --- /dev/null +++ b/catalog/components/tl1431cl5t/tests/regulation.json @@ -0,0 +1,59 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "regulation", + "description": "REF tied to the cathode, fed through 30 ohm from 5 V (about 83 mA, near the 100 mA maximum): the cathode still within 15 mV of VREF (|zKA| 0.2 ohm typical).", + "policy": "electrical", + "until": "2ms", + "circuit": { + "components": [ + { + "id": "VS", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5.0 + } + }, + { + "id": "G0", + "component": "emblink/gnd" + }, + { + "id": "DUT", + "component": "emblink/tl1431cl5t" + }, + { + "id": "RS", + "component": "emblink/resistor", + "params": { + "resistance": 30 + } + } + ], + "nets": { + "IN": [ + "VS.+", + "RS.1" + ], + "K": [ + "RS.2", + "DUT.CATHODE", + "DUT.REF" + ], + "GND": [ + "VS.-", + "DUT.ANODE", + "G0.GND" + ] + } + }, + "inputs": [], + "expect": { + "net:K": { + "at": "1ms", + "min_v": 2.485, + "max_v": 2.53 + } + } +} \ No newline at end of file diff --git a/catalog/components/tl1431cl5t/tests/vka-vref.json b/catalog/components/tl1431cl5t/tests/vka-vref.json new file mode 100644 index 000000000..6f1ccf0ac --- /dev/null +++ b/catalog/components/tl1431cl5t/tests/vka-vref.json @@ -0,0 +1,59 @@ +{ + "schema_version": 1, + "kind": "component_test", + "name": "vka-vref", + "description": "REF tied to the cathode, fed from 5 V through 470 ohm (about 5 mA): the cathode at VREF, 2.500 V (the C grade's 2.490 to 2.510 V).", + "policy": "electrical", + "until": "2ms", + "circuit": { + "components": [ + { + "id": "VS", + "component": "emblink/vsource", + "params": { + "kind": "dc", + "dc": 5.0 + } + }, + { + "id": "G0", + "component": "emblink/gnd" + }, + { + "id": "DUT", + "component": "emblink/tl1431cl5t" + }, + { + "id": "RS", + "component": "emblink/resistor", + "params": { + "resistance": 470 + } + } + ], + "nets": { + "IN": [ + "VS.+", + "RS.1" + ], + "K": [ + "RS.2", + "DUT.CATHODE", + "DUT.REF" + ], + "GND": [ + "VS.-", + "DUT.ANODE", + "G0.GND" + ] + } + }, + "inputs": [], + "expect": { + "net:K": { + "at": "1ms", + "min_v": 2.49, + "max_v": 2.51 + } + } +} \ No newline at end of file diff --git a/core/analog/devices.c b/core/analog/devices.c index 2d70b5e39..9484899b0 100644 --- a/core/analog/devices.c +++ b/core/analog/devices.c @@ -2644,6 +2644,11 @@ typedef struct reg_state { #define REG_RREV 1e6 /* reverse (sinking) leakage resistance of the output, ohms */ +#define REG_ROUT 1e-3 /* the output's own resistance while it regulates, ohms: a + * real regulator's load regulation (about 1 mV per + * ampere here), and what keeps it from being an ideal + * source against its output capacitor, which the + * operating point holds at its initial voltage */ static es_status reg_setup(esk_adev *d) { @@ -2698,7 +2703,7 @@ static void reg_load(esk_adev *d, esk_amatrix *m) double p = s->pol; double vin = p * esk_am_v(m, nin, ng), ib = esk_am_x(m, b); double avail = vin - s->dropout, vo, dvo_dvin; - double iout = -p * ib, excess = iout - (s->thermal ? s->ilim : s->imax), rl = 0.0; + double iout = -p * ib, excess = iout - (s->thermal ? s->ilim : s->imax), rl = REG_ROUT; if (avail < 0.0) { vo = 0.0; dvo_dvin = 0.0; @@ -2709,16 +2714,17 @@ static void reg_load(esk_adev *d, esk_amatrix *m) vo = s->vout * scale; dvo_dvin = 0.0; } + vo -= iout * REG_ROUT; if (excess > 0.0) { vo -= excess * s->rlim; /* a soft current limit */ - rl = s->rlim; + rl += s->rlim; } else if (iout < 0.0 || (iout <= 0.0 && p * esk_am_v(m, nout, ng) >= vo)) { /* the pass element cannot sink: a reverse current only flows through a * large leakage resistance, so a pulled-up output rises above vo. The * output above vo with no current yet (the first iteration against a * supply that holds it) is this case too: regulating there would set * two voltage sources against each other */ - vo -= iout * REG_RREV; + vo -= iout * (REG_RREV - REG_ROUT); rl = REG_RREV; } /* output branch: v_out - v_gnd - p vo(vin) + rl * (iout - i_knee) = 0 (the diff --git a/docs/STATUS.md b/docs/STATUS.md index e28bbcd21..89b02e69d 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -31,8 +31,8 @@ Evidence: protection through OBL_LAUNCH, the IWDG's window, the WWDG's /128, Stop 1 and Standby with SRAM2 kept and PA0's wake-up, and CONTROL.SPSEL in a handler; -- the board's six fixtures (USB, VIN, E5V, VIN without JP5, the IDD - ammeter, B1); +- the board's seven fixtures (USB, VIN, E5V, VIN without JP5, the IDD + ammeter, B1, LD2 through Q1); - 20 of STM32CubeG4's NUCLEO-G474RE examples built unmodified (`tests/vendor/stm32cubeg4/run.py`, also in CI): GPIO_IOToggle, GPIO_EXTI, HAL_TimeBase_TIM, RCC_ClockConfig (the PLL moved between HSI16 @@ -50,17 +50,20 @@ the G474's 512 KiB flash alias: the store sets PGSERR without a fault, so on this part the example's IWDG reset does not come (its scenario says so; not checked on a board). -The board follows UM2505 Rev 7 (its jumpers, power paths with U4's -switch, solder bridges, connectors and crystals) and the part DS12288 Rev 6 -(start-up, flash and PVD values) and RM0440 Rev 9 (reset values, EXTI's -direct lines, the package code). +The board follows MB1367 D-01's schematic, part by part and value by +value (U4 and LD4, U11, U12, the decoupling, VREF from the TL1431 U14 and +Q2 at 3.26 V on VREF+ through JP8's factory position, LD2 switched by Q1, +B1 active high with R26, R27 and C35), UM2505 Rev 7 (the jumpers, solder +bridges, connectors and crystals), and the part DS12288 Rev 6 (start-up, +flash and PVD values) and RM0440 Rev 9 (reset values, EXTI's direct lines, +the package code). Two parts came with it: `emblink/tl1431cl5t` (ST's +shunt reference, against its datasheet's figures 19 and 22) and +`emblink/bsr14` (onsemi's SPICE model). The regulator primitive's output +has 1 mOhm, so an LDO starting into a discharged capacitor solves. Not yet: the peripherals above, the timers' G4 additions (OCxM's and SMS's fourth bits, channels 5 and 6, dithering, the encoder index, the G4's ITR -table), the STLINK-V3E itself (its USB, SWD and drive), JP8's factory -VREF+ from the TL1431 reference and LD2's transistor driver (both await a -TL1431 part and MB1367's schematic), MB1367's own resistor values (assumed -until its schematic). +table), the STLINK-V3E itself (its USB, SWD and drive). ## DC motors and their driver, the robot's first parts (2026-11-08) diff --git a/docs/gallery/README.md b/docs/gallery/README.md index c208ee932..f4e1a5054 100644 --- a/docs/gallery/README.md +++ b/docs/gallery/README.md @@ -225,7 +225,7 @@ approximate until a dimensioned drawing gives `reference.json`. | Design | Run | Board | |---|---|---| -| ![The NUCLEO-G474RE example in the Design workspace](nucleo-g474re/design-nucleo-g474re.png) | ![The example running: VDD on the oscilloscope, LD2 on the logic analyzer, JP5's positions and JP6 among the controls](nucleo-g474re/run-nucleo-g474re.png) | ![The board's 2D face on the bench: LD2 and LD3 lit, JP5 on STLK](nucleo-g474re/board-nucleo-g474re.png) | +| ![The NUCLEO-G474RE example in the Design workspace](nucleo-g474re/design-nucleo-g474re.png) | ![The example running: VDD on the oscilloscope, LD2 on the logic analyzer, JP5's positions and JP6 among the controls](nucleo-g474re/run-nucleo-g474re.png) | ![The board's 2D face on the bench: LD3 lit, LD2 between blinks, JP5 on STLK, JP8 on VREF, LD4 dark](nucleo-g474re/board-nucleo-g474re.png) | ## The NUCLEO-F446ZE (2026-10-31) diff --git a/docs/gallery/nucleo-g474re/board-nucleo-g474re.png b/docs/gallery/nucleo-g474re/board-nucleo-g474re.png index 26f514344e710984266db521cbab908545542c5c..c7d4abfa31d8bca88afcec34562bcc88aaec295a 100644 GIT binary patch literal 95327 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