modm_data.header2svd.stmicro

 1# Copyright 2022, Niklas Hauser
 2# SPDX-License-Identifier: MPL-2.0
 3
 4from .header import Header, getDefineForDevice
 5from .tree import normalize_memory_map
 6
 7__all__ = [
 8    "Header",
 9    "getDefineForDevice",
10    "normalize_memory_map",
11]
def getDefineForDevice(device_id, familyDefines):
37def getDefineForDevice(device_id, familyDefines):
38    if len(familyDefines) == 1:
39        return familyDefines[0]
40
41    # get all defines for this device name
42    devName = "STM32{}{}".format(device_id.family.upper(), device_id.name.upper())
43
44    # Map STM32F7x8 -> STM32F7x7
45    if device_id.family == "f7" and devName[8] == "8":
46        devName = devName[:8] + "7"
47
48    deviceDefines = sorted([define for define in familyDefines if define.startswith(devName)])
49    # if there is only one define thats the one
50    if len(deviceDefines) == 1:
51        return deviceDefines[0]
52
53    # now we match for the size-id.
54    devNameMatch = devName + "x{}".format(device_id.size.upper())
55    for define in deviceDefines:
56        if devNameMatch <= define:
57            return define
58
59    # now we match for the pin-id.
60    devNameMatch = devName + "{}x".format(device_id.pin.upper())
61    for define in deviceDefines:
62        if devNameMatch <= define:
63            return define
64
65    return None
def normalize_memory_map(memtree):
164def normalize_memory_map(memtree):
165    # print(RenderTree(memtree, maxlevel=2))
166    memtree = _normalize_subtypes(memtree, "DMA_TypeDef", "DMA_Channel_TypeDef", "DMA_Stream_TypeDef")
167    memtree = _normalize_subtypes(memtree, "MDMA_TypeDef", "MDMA_Channel_TypeDef")
168    memtree = _normalize_subtypes(memtree, "BDMA_TypeDef", "BDMA_Channel_TypeDef")
169    memtree = _normalize_subtypes(memtree, "LTDC_TypeDef", "LTDC_Layer_TypeDef")
170    memtree = _normalize_subtypes(memtree, "SAI_TypeDef", "SAI_Block_TypeDef")
171    memtree = _normalize_subtypes(memtree, "RAMECC_TypeDef", "RAMECC_MonitorTypeDef")
172
173    memtree = _normalize_dfsdm(memtree)
174    memtree = _normalize_dmamux(memtree)
175    memtree = _normalize_adc_common(memtree)
176
177    memtree = _normalize_duplicates(memtree, lambda n: "_COMMON" in n.name, lambda n: "_COMMON" not in n.name)
178    memtree = _normalize_duplicates(memtree, lambda n: "OPAMP" == n.name, lambda n: re.match(r"OPAMP\d$", n.name))
179
180    memtree = _normalize_instances(memtree)
181    memtree = _normalize_order(memtree)
182    return memtree