Start parsing RCC clock tree.
Extract clocks into the chip yaml where possible.
This commit is contained in:
parent
4d3509c50a
commit
7a31dcef54
33
parse.py
33
parse.py
@ -311,6 +311,10 @@ def parse_chips():
|
|||||||
gpio_af = next(filter(lambda x: x['@Name'] == 'GPIO', r['IP']))['@Version']
|
gpio_af = next(filter(lambda x: x['@Name'] == 'GPIO', r['IP']))['@Version']
|
||||||
gpio_af = removesuffix(gpio_af, '_gpio_v1_0')
|
gpio_af = removesuffix(gpio_af, '_gpio_v1_0')
|
||||||
|
|
||||||
|
rcc = next(filter(lambda x: x['@Name'] == 'RCC', r['IP']))['@Version']
|
||||||
|
rcc = removesuffix(rcc, '-rcc_v1_0')
|
||||||
|
rcc = removesuffix(rcc, '_rcc_v1_0')
|
||||||
|
|
||||||
if chip_name not in chips:
|
if chip_name not in chips:
|
||||||
chips[chip_name] = OrderedDict({
|
chips[chip_name] = OrderedDict({
|
||||||
'name': chip_name,
|
'name': chip_name,
|
||||||
@ -320,6 +324,7 @@ def parse_chips():
|
|||||||
'flash': flash,
|
'flash': flash,
|
||||||
'ram': ram,
|
'ram': ram,
|
||||||
'gpio_af': gpio_af,
|
'gpio_af': gpio_af,
|
||||||
|
'rcc': rcc, # temporarily stashing it here
|
||||||
'packages': [],
|
'packages': [],
|
||||||
'peripherals': {},
|
'peripherals': {},
|
||||||
# 'peripherals': peris,
|
# 'peripherals': peris,
|
||||||
@ -346,6 +351,8 @@ def parse_chips():
|
|||||||
peris[pname] = pkind
|
peris[pname] = pkind
|
||||||
|
|
||||||
for chip_name, chip in chips.items():
|
for chip_name, chip in chips.items():
|
||||||
|
rcc = chip['rcc']
|
||||||
|
del chip['rcc']
|
||||||
h = find_header(chip_name)
|
h = find_header(chip_name)
|
||||||
if h is None:
|
if h is None:
|
||||||
raise Exception("missing header for {}".format(chip_name))
|
raise Exception("missing header for {}".format(chip_name))
|
||||||
@ -363,6 +370,12 @@ def parse_chips():
|
|||||||
'address': addr,
|
'address': addr,
|
||||||
'kind': pkind,
|
'kind': pkind,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if pname in clocks[rcc]:
|
||||||
|
p['clock'] = clocks[rcc][pname]
|
||||||
|
#else:
|
||||||
|
#print( f'peri {pname} -> no clock')
|
||||||
|
|
||||||
if block := match_peri(chip_name+':'+pname+':'+pkind):
|
if block := match_peri(chip_name+':'+pname+':'+pkind):
|
||||||
p['block'] = block
|
p['block'] = block
|
||||||
peris[pname] = p
|
peris[pname] = p
|
||||||
@ -449,7 +462,27 @@ def parse_gpio_af():
|
|||||||
with open('data/gpio_af/'+ff+'.yaml', 'w') as f:
|
with open('data/gpio_af/'+ff+'.yaml', 'w') as f:
|
||||||
f.write(yaml.dump(pins))
|
f.write(yaml.dump(pins))
|
||||||
|
|
||||||
|
clocks = {}
|
||||||
|
|
||||||
|
def parse_clocks():
|
||||||
|
for f in glob('sources/cubedb/mcu/IP/RCC-*rcc_v1_0_Modes.xml'):
|
||||||
|
ff = removeprefix(f, 'sources/cubedb/mcu/IP/RCC-')
|
||||||
|
ff = removesuffix(ff, '_rcc_v1_0_Modes.xml')
|
||||||
|
ff = removesuffix(ff, '-rcc_v1_0_Modes.xml')
|
||||||
|
chip_clocks = {}
|
||||||
|
r = xmltodict.parse(open(f, 'rb'))
|
||||||
|
for ref in r['IP']['RefParameter']:
|
||||||
|
name = ref['@Name']
|
||||||
|
if name.startswith("APB") and name.endswith("Freq_Value") and not name.endswith("TimFreq_Value") and '@IP' in ref:
|
||||||
|
name = removesuffix(name, "Freq_Value")
|
||||||
|
peripherals = ref['@IP']
|
||||||
|
peripherals = peripherals.split(",")
|
||||||
|
for p in peripherals:
|
||||||
|
chip_clocks[p] = name
|
||||||
|
clocks[ff] = chip_clocks
|
||||||
|
|
||||||
|
|
||||||
parse_gpio_af()
|
parse_gpio_af()
|
||||||
parse_headers()
|
parse_headers()
|
||||||
|
parse_clocks()
|
||||||
parse_chips()
|
parse_chips()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user