USART codegen

This commit is contained in:
Dario Nieuwenhuis
2021-04-25 22:35:51 +02:00
parent 6ba915a308
commit 936efd164d
154 changed files with 6225 additions and 83 deletions

View File

@ -11,6 +11,7 @@ abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)
# ======= load chips
chips = {}
for f in sorted(glob('stm32-data/data/chips/*.yaml')):
if 'STM32F4' not in f:
@ -21,6 +22,14 @@ for f in sorted(glob('stm32-data/data/chips/*.yaml')):
print(chip['name'])
chips[chip['name']] = chip
# ======= load GPIO AF
gpio_afs = {}
for f in sorted(glob('stm32-data/data/gpio_af/*.yaml')):
name = f.split('/')[-1].split('.')[0]
with open(f, 'r') as f:
af = yaml.load(f, Loader=yaml.SafeLoader)
gpio_afs[name] = af
# ========= Update chip/mod.rs
with open('src/chip/mod.rs', 'w') as f:
@ -49,6 +58,7 @@ with open('Cargo.toml', 'w') as f:
for chip in chips.values():
print(f'generating {chip["name"]}')
af = gpio_afs[chip['gpio_af']]
peripherals = []
impls = []
pins = set()
@ -71,13 +81,30 @@ for chip in chips.values():
pin = f'P{port}{pin_num}'
pins.add(pin)
peripherals.append(pin)
impls.append(
f'impl_gpio_pin!({pin}, {port_num}, {pin_num}, EXTI{pin_num});')
impls.append(f'impl_gpio_pin!({pin}, {port_num}, {pin_num}, EXTI{pin_num});')
continue
# TODO maybe we should only autogenerate the known ones...??
peripherals.append(name)
if 'block' not in peri:
continue
if peri['block'] == 'usart_v1/USART':
impls.append(f'impl_usart!({name}, 0x{peri["address"]:x});')
for pin, funcs in af.items():
if pin in pins:
if func := funcs.get(f'{name}_RX'):
impls.append(f'impl_usart_pin!({name}, RxPin, {pin}, {func});')
if func := funcs.get(f'{name}_TX'):
impls.append(f'impl_usart_pin!({name}, TxPin, {pin}, {func});')
if func := funcs.get(f'{name}_CTS'):
impls.append(f'impl_usart_pin!({name}, CtsPin, {pin}, {func});')
if func := funcs.get(f'{name}_RTS'):
impls.append(f'impl_usart_pin!({name}, RtsPin, {pin}, {func});')
if func := funcs.get(f'{name}_CK'):
impls.append(f'impl_usart_pin!({name}, CkPin, {pin}, {func});')
with open(f'src/chip/{chip["name"]}.rs', 'w') as f:
# TODO uart etc
# TODO import the right GPIO AF map mod