Skip to content

Commit 4ce1bb3

Browse files
committed
Properly generate ALT pins for variant.h.
1 parent 0fcd115 commit 4ce1bb3

1 file changed

Lines changed: 18 additions & 12 deletions

File tree

misc/scripts/gd32_genpinmap/pinmap_converter.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ def get_alt_pinnames(pinmap: GD32PinMap, mcu:GD32MCUInfo) -> List[str]:
4848
alt_pinnames += [f"{pin_info.pin_name}_ALT{alt} ({pin_info.pin_name} | ALT{alt})" for alt in range(1, nalts)]
4949
return alt_pinnames
5050

51+
@staticmethod
52+
def get_all_alt_pins(peripheral_c: str) -> List[str]:
53+
alt_match = re.findall("PORT[A-Z]_[0-9]+_ALT[0-9]", peripheral_c) or []
54+
return sorted(set(alt_match), key=GD32Pin.natural_sort_key)
55+
5156
@staticmethod
5257
def get_dac_pins(pinmap: GD32PinMap, device_name:str) -> List[Tuple[GD32Pin, GD32PinFunction]]:
5358
return pinmap.search_pins_for_function([GD32PinCriteria(GD32PinCriteriaType.PERIPHERAL_STARTS_WITH, ["DAC"])], filter_device_name=device_name)
@@ -537,8 +542,7 @@ def generate_arduino_peripheralnames_h(pinmap:GD32PinMap, device_name:str) -> st
537542

538543
@staticmethod
539544
def generate_arduino_pinnamesvar_h(peripheral_pins_output: str) -> str:
540-
alt_match = re.findall("PORT[A-Z]_[0-9]+_ALT[0-9]", peripheral_pins_output) or []
541-
output = "".join(m + ",\n" for m in sorted(set(alt_match), key=GD32Pin.natural_sort_key))
545+
output = "".join(m + ",\n" for m in GD32PinMapGenerator.get_all_alt_pins(peripheral_pins_output))
542546
return output
543547

544548
@staticmethod
@@ -577,7 +581,7 @@ def get_second_or_fallback_first_pin(pins, already_assigned_pins:List[str] = Non
577581
return pin_candidate
578582

579583
@staticmethod
580-
def generate_arduino_variant_h(pinmap:GD32PinMap, mcu:GD32MCUInfo) -> str:
584+
def generate_arduino_variant_h(pinmap:GD32PinMap, mcu:GD32MCUInfo, peripheral_c: str) -> str:
581585
device_name = mcu.name_no_package
582586
output = community_copyright_header
583587
output += variant_h_header_start
@@ -607,10 +611,12 @@ def generate_arduino_variant_h(pinmap:GD32PinMap, mcu:GD32MCUInfo) -> str:
607611
else:
608612
output += "/* warning: no ADC pins detected.. */\n"
609613

610-
all_alt_pins = GD32PinMapGenerator.get_alt_pinnames(pinmap, mcu)
611614
output += "\n/* alternative pin remappings */\n"
612-
for p in all_alt_pins:
613-
output += f"#define {p}\n"
615+
for p in GD32PinMapGenerator.get_all_alt_pins(peripheral_c):
616+
# convert from PORTA_1_ALT1 to PA1_ALT1
617+
m = re.match("PORT([A-Z])_([0-9]+)_(ALT.)", p)
618+
arduino_pin = f"P{m.group(1)}{m.group(2)}"
619+
output += f"#define {arduino_pin}_{m.group(3)} ({arduino_pin} | {m.group(3)})\n"
614620

615621
output += "\n/* LED definitions */\n"
616622
if pinmap.pin_is_available_for_device("PC13", device_name):
@@ -827,19 +833,19 @@ def generate_from_pinmap(pinmap: GD32PinMap, mcus:List[GD32MCUInfo]):
827833
print_big_str(output)
828834
write_to_file(output, path.join(target_base_folder, "PeripheralNames.h"))
829835
# PeripheralPins.c
830-
output = GD32PinMapGenerator.generate_arduino_peripheralpins_c(pinmap, mcu)
831-
print_big_str(output)
832-
write_to_file(output, path.join(target_base_folder, "PeripheralPins.c"))
833-
# PinNamesVar.h; Use PeripheralPins.c output to generate a list of alt names
834-
output = GD32PinMapGenerator.generate_arduino_pinnamesvar_h(output)
836+
peripheral_output = GD32PinMapGenerator.generate_arduino_peripheralpins_c(pinmap, mcu)
837+
print_big_str(peripheral_output)
838+
write_to_file(peripheral_output, path.join(target_base_folder, "PeripheralPins.c"))
839+
# PinNamesVar.h; Attention! Uses PeripheralPins.c output to generate a list of alt names
840+
output = GD32PinMapGenerator.generate_arduino_pinnamesvar_h(peripheral_output)
835841
print_big_str(output)
836842
write_to_file(output, path.join(target_base_folder, "PinNamesVar.h"))
837843
# variant.cpp
838844
output = GD32PinMapGenerator.generate_arduino_variant_cpp(pinmap, mcu_name)
839845
print_big_str(output)
840846
write_to_file(output, path.join(target_base_folder, "variant.cpp"))
841847
# variant.h
842-
output = GD32PinMapGenerator.generate_arduino_variant_h(pinmap, mcu)
848+
output = GD32PinMapGenerator.generate_arduino_variant_h(pinmap, mcu, peripheral_output)
843849
print_big_str(output)
844850
write_to_file(output, path.join(target_base_folder, "variant.h"))
845851
# ldscript.ld

0 commit comments

Comments
 (0)