From fc64e88b92a5a1ad37e5ac9d97748146a5fa512a Mon Sep 17 00:00:00 2001 From: Bob McWhirter Date: Thu, 10 Jun 2021 10:15:45 -0400 Subject: [PATCH] Extract ADCv3 (arrayification is not possible, slight diffs in field widths) Extract ADC_COMMON Create framework for extra synthetic hand-crafted peripherals. Add VREFINTCAL reg/block/peripheral for STM32L4+. --- data/extra/family/STM32L4+.yaml | 4 ++++ .../{adc_common_v3.yaml => adccommon_v3.yaml} | 2 +- data/registers/vrefintcal_v1.yaml | 15 +++++++++++++++ parse.py | 18 +++++++++++++++++- 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 data/extra/family/STM32L4+.yaml rename data/registers/{adc_common_v3.yaml => adccommon_v3.yaml} (99%) create mode 100644 data/registers/vrefintcal_v1.yaml diff --git a/data/extra/family/STM32L4+.yaml b/data/extra/family/STM32L4+.yaml new file mode 100644 index 0000000..a72291a --- /dev/null +++ b/data/extra/family/STM32L4+.yaml @@ -0,0 +1,4 @@ +peripherals: + VREFINTCAL: + address: 0x1FFF75AA + block: vrefintcal_v1/VREFINTCAL diff --git a/data/registers/adc_common_v3.yaml b/data/registers/adccommon_v3.yaml similarity index 99% rename from data/registers/adc_common_v3.yaml rename to data/registers/adccommon_v3.yaml index 6522661..e9ae7b0 100644 --- a/data/registers/adc_common_v3.yaml +++ b/data/registers/adccommon_v3.yaml @@ -1,5 +1,5 @@ --- -block/ADC_Common: +block/ADC_COMMON: description: Analog-to-Digital Converter items: - name: CSR diff --git a/data/registers/vrefintcal_v1.yaml b/data/registers/vrefintcal_v1.yaml new file mode 100644 index 0000000..3af2ff3 --- /dev/null +++ b/data/registers/vrefintcal_v1.yaml @@ -0,0 +1,15 @@ +--- +block/VREFINTCAL: + description: VREFINT Factory Calibration + items: + - name: DATA + description: Factory calibration + byte_offset: 0 + fieldset: DATA +fieldset/DATA: + description: Factory calibration data + fields: + - name: VALUE + description: Calibration value + bit_offset: 0 + bit_size: 16 diff --git a/parse.py b/parse.py index 6d03fac..d6520e6 100644 --- a/parse.py +++ b/parse.py @@ -239,6 +239,7 @@ perimap = [ ('.*:DAC:dacif_v2_0', 'dac_v2/DAC'), ('.*:DAC:dacif_v3_0', 'dac_v2/DAC'), ('.*:ADC:aditf5_v2_0', 'adc_v3/ADC'), + ('.*:ADC_COMMON:aditf5_v2_0', 'adccommon_v3/ADC_COMMON'), ('STM32F4.*:SYS:.*', 'syscfg_f4/SYSCFG'), ('STM32L4.*:SYS:.*', 'syscfg_l4/SYSCFG'), ('STM32L0.*:SYS:.*', 'syscfg_l0/SYSCFG'), @@ -361,6 +362,8 @@ def parse_chips(): rcc = removesuffix(rcc, '_rcc_v1_0') core = r['Core'] + family = r['@Family'] + # multicores have a list here. Just keep the first, to not break the schema. if isinstance(core, list): core = core[0] @@ -368,7 +371,7 @@ def parse_chips(): if chip_name not in chips: chips[chip_name] = OrderedDict({ 'name': chip_name, - 'family': r['@Family'], + 'family': family, 'line': r['@Line'], 'core': core, 'flash': flash, @@ -387,10 +390,12 @@ def parse_chips(): 'package': r['@Package'], })) + # Some packages have some peripehrals removed because the package had to # remove GPIOs useful for that peripheral. So we merge all peripherals from all packages. peris = chips[chip_name]['peripherals'] pins = chips[chip_name]['pins'] + for ip in r['IP']: pname = ip['@InstanceName'] pkind = ip['@Name']+':'+ip['@Version'] @@ -400,6 +405,9 @@ def parse_chips(): pname = 'SYSCFG' if pname in FAKE_PERIPHERALS: continue + if pname.startswith('ADC'): + if not pname + '_COMMON' in peris: + peris[pname + '_COMMON'] = ip['@Name'] + '_COMMON:'+removesuffix(ip['@Version'], '_Cube') peris[pname] = pkind pins[pname] = [] @@ -477,6 +485,14 @@ def parse_chips(): peris[pname] = p + family_extra = "data/extra/family/" + chip['family'] + ".yaml"; + if os.path.exists(family_extra) : + with open(family_extra) as extra_f: + extra = yaml.load(extra_f, Loader=yaml.SafeLoader) + for (extra_name, extra_p) in extra['peripherals'].items(): + print(f'adding {extra_name}') + peris[extra_name] = extra_p + # Handle GPIO specially. for p in range(20): port = 'GPIO' + chr(ord('A')+p)