@@ -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