Skip to content

Commit 41358ae

Browse files
committed
WIP extract signals from *.svd
1 parent 148b72a commit 41358ae

File tree

7 files changed

+16039
-264
lines changed

7 files changed

+16039
-264
lines changed

devices/nrf/nrf52810.xml

Lines changed: 1024 additions & 32 deletions
Large diffs are not rendered by default.

devices/nrf/nrf52811.xml

Lines changed: 1376 additions & 32 deletions
Large diffs are not rendered by default.

devices/nrf/nrf52820.xml

Lines changed: 1472 additions & 32 deletions
Large diffs are not rendered by default.

devices/nrf/nrf52832.xml

Lines changed: 1824 additions & 32 deletions
Large diffs are not rendered by default.

devices/nrf/nrf52833.xml

Lines changed: 4992 additions & 64 deletions
Large diffs are not rendered by default.

devices/nrf/nrf52840.xml

Lines changed: 5312 additions & 64 deletions
Large diffs are not rendered by default.

tools/generator/dfg/nrf/nrf_device_tree.py

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,24 @@ def _properties_from_file(ld_filename):
7373
p["memories"] = memories
7474

7575

76+
# Signals FIXME continue here, find derived peripherals
77+
signals = {}
78+
raw_signals = device_file.query("//peripherals/peripheral/registers/cluster")
79+
for s in raw_signals:
80+
if s.find('name').text == "PSEL":
81+
82+
# find parent peripheral
83+
parent_peripheral_instance = s.getparent().getparent().find('name').text.lower()
84+
signals[parent_peripheral_instance] = []
85+
86+
# find all signals of peripheral
87+
signal_elements = s.findall('register/name')
88+
for signal_element in signal_elements:
89+
signal_name = signal_element.text.lower()
90+
signals[parent_peripheral_instance].append(signal_name)
91+
92+
93+
# drivers and gpios
7694
raw_modules = device_file.query("//peripherals/peripheral")
7795
modules = []
7896
ports = {}
@@ -95,9 +113,21 @@ def _properties_from_file(ld_filename):
95113
matchString = r"(?P<module>.*\D)(?P<instance>\d*$)"
96114
match = re.search(matchString, modulename)
97115
modules.append({'module': match.group("module").lower(), 'instance': modulename.lower()})
116+
117+
# copy available signals to all derived peripherals
118+
if m.get('derivedFrom') is not None:
119+
if m.get('derivedFrom').lower() in signals:
120+
print(modulename.lower() + " is derived from " + m.get('derivedFrom').lower())
121+
signals[modulename.lower()] = signals[m.get('derivedFrom').lower()]
98122
p['modules'] = sorted(list(set([(m['module'], m['instance']) for m in modules])))
99123
p['gpios'] = gpios
100124
p['signals'] = []
125+
for instance in signals:
126+
for signal in signals[instance]:
127+
matchString = r"(?P<module>.*\D)(?P<instance>\d*$)"
128+
match = re.search(matchString, instance)
129+
p['signals'].append({'driver': match.group("module").lower(), 'instance': instance, 'name': signal})
130+
101131

102132
interrupts = []
103133
raw_interrupt = device_file.query("//peripherals/peripheral/interrupt")
@@ -114,12 +144,12 @@ def _properties_from_file(ld_filename):
114144

115145
LOGGER.debug("Found GPIOs: [%s]", ", ".join([p.upper() + "." + i for p,i in p['gpios']]))
116146
LOGGER.debug("Available Modules are:\n" + NRFDeviceTree._modulesToString(p['modules']))
117-
# LOGGER.debug("Found Signals:")
118-
# for sig in p['signals']:
119-
# LOGGER.debug(" %s", sig)
120-
# LOGGER.debug("Found Interrupts:")
121-
# for intr in p['interrupts']:
122-
# LOGGER.debug(" %s", intr)
147+
LOGGER.debug("Found Signals:")
148+
for sig in p['signals']:
149+
LOGGER.debug(" %s", sig)
150+
LOGGER.debug("Found Interrupts:")
151+
for intr in p['interrupts']:
152+
LOGGER.debug(" %s", intr)
123153

124154
return p
125155

@@ -225,8 +255,8 @@ def driverOrder(e):
225255
e['instance'] if e['instance'] is not None else '',
226256
e['name'] if e['name'] is not None else ''))
227257
# add all signals
228-
for s in [s for s in p['signals'] if s['pad'] == ("p" + port + pin)]:
229-
driver, instance, name = s['module'], s['instance'], s['group']
258+
for s in p['signals']:
259+
driver, instance, name = s['driver'], s['instance'], s['name']
230260
# add the af node
231261
pin_signal = {'driver': driver}
232262
if instance != driver:
@@ -239,6 +269,7 @@ def driverOrder(e):
239269
if "name" not in pin_signal:
240270
LOGGER.error("%s has no name!", s)
241271
continue
272+
242273
af = pin_driver.addChild('signal')
243274
af.setAttributes(['driver', 'instance', 'name'], pin_signal)
244275

0 commit comments

Comments
 (0)