tools/gen-device-svd: emit correct Go code for stm32
Groups were not recognized because the parser only looked at the derivedFrom attribute and not at <groupName> tags for matching peripherals.
Этот коммит содержится в:
родитель
9fa08bf51d
коммит
d841daa32b
1 изменённых файлов: 16 добавлений и 8 удалений
|
@ -41,6 +41,7 @@ def readSVD(path):
|
|||
|
||||
device.peripherals = []
|
||||
peripheralDict = {}
|
||||
groups = {}
|
||||
|
||||
interrupts = OrderedDict()
|
||||
|
||||
|
@ -52,25 +53,29 @@ def readSVD(path):
|
|||
description = formatText(getText(descriptionTags[0]))
|
||||
baseAddress = int(getText(periphEl.getElementsByTagName('baseAddress')[0]), 0)
|
||||
groupNameTags = periphEl.getElementsByTagName('groupName')
|
||||
groupName = name
|
||||
groupName = None
|
||||
if groupNameTags:
|
||||
groupName = getText(groupNameTags[0])
|
||||
|
||||
if periphEl.hasAttribute('derivedFrom'):
|
||||
derivedFromName = periphEl.getAttribute('derivedFrom')
|
||||
derivedFrom = peripheralDict[derivedFromName]
|
||||
if periphEl.hasAttribute('derivedFrom') or groupName in groups:
|
||||
if periphEl.hasAttribute('derivedFrom'):
|
||||
derivedFromName = periphEl.getAttribute('derivedFrom')
|
||||
derivedFrom = peripheralDict[derivedFromName]
|
||||
else:
|
||||
derivedFrom = groups[groupName]
|
||||
peripheral = {
|
||||
'name': name,
|
||||
'groupName': derivedFrom['groupName'],
|
||||
'description': description if description is not None else derivedFrom['description'],
|
||||
'description': description or derivedFrom['description'],
|
||||
'baseAddress': baseAddress,
|
||||
}
|
||||
device.peripherals.append(peripheral)
|
||||
peripheralDict[name] = peripheral
|
||||
continue
|
||||
|
||||
peripheral = {
|
||||
'name': name,
|
||||
'groupName': groupName,
|
||||
'groupName': groupName or name,
|
||||
'description': description,
|
||||
'baseAddress': baseAddress,
|
||||
'registers': [],
|
||||
|
@ -78,6 +83,9 @@ def readSVD(path):
|
|||
device.peripherals.append(peripheral)
|
||||
peripheralDict[name] = peripheral
|
||||
|
||||
if groupName and groupName not in groups:
|
||||
groups[groupName] = peripheral
|
||||
|
||||
for interrupt in periphEl.getElementsByTagName('interrupt'):
|
||||
intrName = getText(interrupt.getElementsByTagName('name')[0])
|
||||
intrIndex = int(getText(interrupt.getElementsByTagName('value')[0]))
|
||||
|
@ -96,7 +104,7 @@ def readSVD(path):
|
|||
if regsEls:
|
||||
for el in regsEls[0].childNodes:
|
||||
if el.nodeName == 'register':
|
||||
peripheral['registers'].append(parseSVDRegister(groupName, el, baseAddress))
|
||||
peripheral['registers'].append(parseSVDRegister(groupName or name, el, baseAddress))
|
||||
elif el.nodeName == 'cluster':
|
||||
if el.getElementsByTagName('dim'):
|
||||
continue # TODO
|
||||
|
@ -104,7 +112,7 @@ def readSVD(path):
|
|||
clusterOffset = int(getText(el.getElementsByTagName('addressOffset')[0]), 0)
|
||||
for regEl in el.childNodes:
|
||||
if regEl.nodeName == 'register':
|
||||
peripheral['registers'].append(parseSVDRegister(groupName, regEl, baseAddress + clusterOffset, clusterPrefix))
|
||||
peripheral['registers'].append(parseSVDRegister(groupName or name, regEl, baseAddress + clusterOffset, clusterPrefix))
|
||||
else:
|
||||
continue
|
||||
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче