Merge pull request #19 from embassy-rs/h7-syscfg

H7 SYSCFG
This commit is contained in:
Dario Nieuwenhuis 2021-05-08 21:12:24 +02:00 committed by GitHub
commit 1b18ea01f9
2 changed files with 436 additions and 9 deletions

View File

@ -0,0 +1,410 @@
---
block/SYSCFG:
description: System configuration controller
items:
- name: PMCR
description: peripheral mode configuration register
byte_offset: 4
fieldset: PMCR
- name: EXTICR
description: external interrupt configuration register 1
array:
len: 4
stride: 4
byte_offset: 8
fieldset: EXTICR
- name: CCCSR
description: compensation cell control/status register
byte_offset: 32
fieldset: CCCSR
- name: CCVR
description: SYSCFG compensation cell value register
byte_offset: 36
access: Read
fieldset: CCVR
- name: CCCR
description: SYSCFG compensation cell code register
byte_offset: 40
fieldset: CCCR
- name: PWRCR
description: SYSCFG power control register
byte_offset: 44
fieldset: PWRCR
- name: PKGR
description: SYSCFG package register
byte_offset: 292
access: Read
fieldset: PKGR
- name: UR0
description: SYSCFG user register 0
byte_offset: 768
access: Read
fieldset: UR0
- name: UR2
description: SYSCFG user register 2
byte_offset: 776
fieldset: UR2
- name: UR3
description: SYSCFG user register 3
byte_offset: 780
fieldset: UR3
- name: UR4
description: SYSCFG user register 4
byte_offset: 784
access: Read
fieldset: UR4
- name: UR5
description: SYSCFG user register 5
byte_offset: 788
access: Read
fieldset: UR5
- name: UR6
description: SYSCFG user register 6
byte_offset: 792
access: Read
fieldset: UR6
- name: UR7
description: SYSCFG user register 7
byte_offset: 796
access: Read
fieldset: UR7
- name: UR8
description: SYSCFG user register 8
byte_offset: 800
access: Read
fieldset: UR8
- name: UR9
description: SYSCFG user register 9
byte_offset: 804
access: Read
fieldset: UR9
- name: UR10
description: SYSCFG user register 10
byte_offset: 808
access: Read
fieldset: UR10
- name: UR11
description: SYSCFG user register 11
byte_offset: 812
access: Read
fieldset: UR11
- name: UR12
description: SYSCFG user register 12
byte_offset: 816
access: Read
fieldset: UR12
- name: UR13
description: SYSCFG user register 13
byte_offset: 820
access: Read
fieldset: UR13
- name: UR14
description: SYSCFG user register 14
byte_offset: 824
fieldset: UR14
- name: UR15
description: SYSCFG user register 15
byte_offset: 828
access: Read
fieldset: UR15
- name: UR16
description: SYSCFG user register 16
byte_offset: 832
access: Read
fieldset: UR16
- name: UR17
description: SYSCFG user register 17
byte_offset: 836
access: Read
fieldset: UR17
fieldset/CCCR:
description: SYSCFG compensation cell code register
fields:
- name: NCC
description: NMOS compensation code
bit_offset: 0
bit_size: 4
- name: PCC
description: PMOS compensation code
bit_offset: 4
bit_size: 4
fieldset/CCCSR:
description: compensation cell control/status register
fields:
- name: EN
description: enable
bit_offset: 0
bit_size: 1
- name: CS
description: Code selection
bit_offset: 1
bit_size: 1
- name: READY
description: Compensation cell ready flag
bit_offset: 8
bit_size: 1
- name: HSLV
description: High-speed at low-voltage
bit_offset: 16
bit_size: 1
fieldset/CCVR:
description: SYSCFG compensation cell value register
fields:
- name: NCV
description: NMOS compensation value
bit_offset: 0
bit_size: 4
- name: PCV
description: PMOS compensation value
bit_offset: 4
bit_size: 4
fieldset/EXTICR:
description: external interrupt configuration register 2
fields:
- name: EXTI
description: EXTI x configuration (x = 4 to 7)
bit_offset: 0
bit_size: 4
array:
len: 4
stride: 4
fieldset/PKGR:
description: SYSCFG package register
fields:
- name: PKG
description: Package
bit_offset: 0
bit_size: 4
fieldset/PMCR:
description: peripheral mode configuration register
fields:
- name: I2C1FMP
description: I2C1 Fm+
bit_offset: 0
bit_size: 1
- name: I2C2FMP
description: I2C2 Fm+
bit_offset: 1
bit_size: 1
- name: I2C3FMP
description: I2C3 Fm+
bit_offset: 2
bit_size: 1
- name: I2C4FMP
description: I2C4 Fm+
bit_offset: 3
bit_size: 1
- name: PB6FMP
description: PB(6) Fm+
bit_offset: 4
bit_size: 1
- name: PB7FMP
description: PB(7) Fast Mode Plus
bit_offset: 5
bit_size: 1
- name: PB8FMP
description: PB(8) Fast Mode Plus
bit_offset: 6
bit_size: 1
- name: PB9FMP
description: PB(9) Fm+
bit_offset: 7
bit_size: 1
- name: BOOSTE
description: Booster Enable
bit_offset: 8
bit_size: 1
- name: BOOSTVDDSEL
description: Analog switch supply voltage selection
bit_offset: 9
bit_size: 1
- name: EPIS
description: Ethernet PHY Interface Selection
bit_offset: 21
bit_size: 3
- name: PA0SO
description: PA0 Switch Open
bit_offset: 24
bit_size: 1
- name: PA1SO
description: PA1 Switch Open
bit_offset: 25
bit_size: 1
- name: PC2SO
description: PC2 Switch Open
bit_offset: 26
bit_size: 1
- name: PC3SO
description: PC3 Switch Open
bit_offset: 27
bit_size: 1
fieldset/PWRCR:
description: SYSCFG power control register
fields:
- name: ODEN
description: " Overdrive enable"
bit_offset: 0
bit_size: 4
fieldset/UR0:
description: SYSCFG user register 0
fields:
- name: BKS
description: Bank Swap
bit_offset: 0
bit_size: 1
- name: RDP
description: Readout protection
bit_offset: 16
bit_size: 8
fieldset/UR10:
description: SYSCFG user register 10
fields:
- name: PA_END_2
description: Protected area end address for bank 2
bit_offset: 0
bit_size: 12
- name: SA_BEG_2
description: Secured area start address for bank 2
bit_offset: 16
bit_size: 12
fieldset/UR11:
description: SYSCFG user register 11
fields:
- name: SA_END_2
description: Secured area end address for bank 2
bit_offset: 0
bit_size: 12
- name: IWDG1M
description: Independent Watchdog 1 mode
bit_offset: 16
bit_size: 1
fieldset/UR12:
description: SYSCFG user register 12
fields:
- name: SECURE
description: Secure mode
bit_offset: 16
bit_size: 1
fieldset/UR13:
description: SYSCFG user register 13
fields:
- name: SDRS
description: Secured DTCM RAM Size
bit_offset: 0
bit_size: 2
- name: D1SBRST
description: D1 Standby reset
bit_offset: 16
bit_size: 1
fieldset/UR14:
description: SYSCFG user register 14
fields:
- name: D1STPRST
description: D1 Stop Reset
bit_offset: 0
bit_size: 1
fieldset/UR15:
description: SYSCFG user register 15
fields:
- name: FZIWDGSTB
description: Freeze independent watchdog in Standby mode
bit_offset: 16
bit_size: 1
fieldset/UR16:
description: SYSCFG user register 16
fields:
- name: FZIWDGSTP
description: Freeze independent watchdog in Stop mode
bit_offset: 0
bit_size: 1
- name: PKP
description: Private key programmed
bit_offset: 16
bit_size: 1
fieldset/UR17:
description: SYSCFG user register 17
fields:
- name: IO_HSLV
description: I/O high speed / low voltage
bit_offset: 0
bit_size: 1
fieldset/UR2:
description: SYSCFG user register 2
fields:
- name: BORH
description: BOR_LVL Brownout Reset Threshold Level
bit_offset: 0
bit_size: 2
- name: BOOT_ADD0
description: Boot Address 0
bit_offset: 16
bit_size: 16
fieldset/UR3:
description: SYSCFG user register 3
fields:
- name: BOOT_ADD1
description: Boot Address 1
bit_offset: 16
bit_size: 16
fieldset/UR4:
description: SYSCFG user register 4
fields:
- name: MEPAD_1
description: Mass Erase Protected Area Disabled for bank 1
bit_offset: 16
bit_size: 1
fieldset/UR5:
description: SYSCFG user register 5
fields:
- name: MESAD_1
description: Mass erase secured area disabled for bank 1
bit_offset: 0
bit_size: 1
- name: WRPN_1
description: Write protection for flash bank 1
bit_offset: 16
bit_size: 8
fieldset/UR6:
description: SYSCFG user register 6
fields:
- name: PA_BEG_1
description: Protected area start address for bank 1
bit_offset: 0
bit_size: 12
- name: PA_END_1
description: Protected area end address for bank 1
bit_offset: 16
bit_size: 12
fieldset/UR7:
description: SYSCFG user register 7
fields:
- name: SA_BEG_1
description: Secured area start address for bank 1
bit_offset: 0
bit_size: 12
- name: SA_END_1
description: Secured area end address for bank 1
bit_offset: 16
bit_size: 12
fieldset/UR8:
description: SYSCFG user register 8
fields:
- name: MEPAD_2
description: Mass erase protected area disabled for bank 2
bit_offset: 0
bit_size: 1
- name: MESAD_2
description: Mass erase secured area disabled for bank 2
bit_offset: 16
bit_size: 1
fieldset/UR9:
description: SYSCFG user register 9
fields:
- name: WRPN_2
description: Write protection for flash bank 2
bit_offset: 0
bit_size: 8
- name: PA_BEG_2
description: Protected area start address for bank 2
bit_offset: 16
bit_size: 12

View File

@ -7,6 +7,20 @@ from collections import OrderedDict
from glob import glob
def removeprefix(value: str, prefix: str, /) -> str:
if value.startswith(prefix):
return value[len(prefix):]
else:
return value[:]
def removesuffix(value: str, suffix: str, /) -> str:
if value.endswith(suffix):
return value[:-len(suffix)]
else:
return value[:]
def represent_ordereddict(dumper, data):
value = []
@ -217,6 +231,7 @@ perimap = [
('.*:RNG:rng1_v3_1', 'rng_v1/RNG'),
('STM32F4.*:SYS:.*', 'syscfg_f4/SYSCFG'),
('STM32L4.*:SYS:.*', 'syscfg_l4/SYSCFG'),
('STM32H7.*:SYS:.*', 'syscfg_h7/SYSCFG'),
('.*SDMMC:sdmmc2_v1_0', 'sdmmc_v2/SDMMC'),
]
@ -233,8 +248,8 @@ def parse_headers():
print('loading headers...')
for f in glob('sources/headers/*.h'):
# if 'stm32f4' not in f: continue
ff = f.removeprefix('sources/headers/')
ff = ff.removesuffix('.h')
ff = removeprefix(f, 'sources/headers/')
ff = removesuffix(ff, '.h')
try:
with open('sources/headers_parsed/{}.json'.format(ff), 'r') as j:
@ -292,7 +307,8 @@ def parse_chips():
chip_name = chip_name_from_package_name(package_name)
flash = int(package_flashs[package_i])
ram = int(package_rams[package_i])
gpio_af = next(filter(lambda x: x['@Name'] == 'GPIO', r['IP']))['@Version'].removesuffix('_gpio_v1_0')
gpio_af = next(filter(lambda x: x['@Name'] == 'GPIO', r['IP']))['@Version']
gpio_af = removesuffix(gpio_af, '_gpio_v1_0')
if chip_name not in chips:
chips[chip_name] = OrderedDict({
@ -320,7 +336,7 @@ def parse_chips():
for ip in r['IP']:
pname = ip['@InstanceName']
pkind = ip['@Name']+':'+ip['@Version']
pkind = pkind.removesuffix('_Cube')
pkind = removesuffix(pkind, '_Cube')
if pname == 'SYS':
pname = 'SYSCFG'
@ -384,8 +400,8 @@ def parse_gpio_af():
if 'STM32F1' in f:
continue
ff = f.removeprefix('sources/cubedb/mcu/IP/GPIO-')
ff = ff.removesuffix('_gpio_v1_0_Modes.xml')
ff = removeprefix(f, 'sources/cubedb/mcu/IP/GPIO-')
ff = removesuffix(ff, '_gpio_v1_0_Modes.xml')
print(ff)
pins = {}
@ -404,14 +420,15 @@ def parse_gpio_af():
pin_name = pin_name.split(' ')[0]
pin_name = pin_name.split('_')[0]
pin_name = pin_name.split('(')[0]
pin_name = pin_name.removesuffix('OSC32')
pin_name = pin_name.removesuffix('BOOT0')
pin_name = removesuffix(pin_name, 'OSC32')
pin_name = removesuffix(pin_name, 'BOOT0')
# Extract AFs
afs = {}
for signal in children(pin, 'PinSignal'):
func = signal['@Name']
afn = int(signal['SpecificParameter']['PossibleValue'].split('_')[1].removeprefix('AF'))
afn = signal['SpecificParameter']['PossibleValue'].split('_')[1]
afn = int(removeprefix(afn, 'AF'))
afs[func] = afn
pins[pin_name] = afs