@@ -8,9 +8,20 @@ def get_ld_defines(chip_name: str):
88 target_mcu : str = ""
99 mcu_package : int = 0
1010 target_mcu_ld : int = 0
11- if chip_name .startswith ("ch32v003" ):
12- target_mcu = "CH32V003"
13- target_mcu_ld = 0
11+ if chip_name .startswith ("ch32v00" ):
12+ target_mcu = chip_name .upper ()[0 :len ("ch32v00x" )]
13+ mcu_package = 1
14+ if "003" in chip_name :
15+ target_mcu_ld = 0
16+ elif "002" in chip_name :
17+ target_mcu_ld = 5
18+ elif "004" in chip_name or "005" in chip_name :
19+ target_mcu_ld = 6
20+ elif "006" in chip_name or "007" in chip_name :
21+ target_mcu_ld = 7
22+ else :
23+ sys .stdout .write ("Unknown CH32V00x variant %s\n " % chip_name )
24+ env .Exit (- 1 )
1425 else :
1526 mcu_package = 1
1627 if chip_name .startswith ("ch32v10" ):
@@ -90,8 +101,57 @@ def get_ld_defines(chip_name: str):
90101 elif "rb" in chip_name :
91102 mcu_package = 2
92103 target_mcu_ld = 3
104+ elif chip_name .startswith ("ch57" ):
105+ # CH570 / CH571 / CH572 / CH573
106+ target_mcu = "CH57X"
107+ if "570" in chip_name :
108+ mcu_package = 0
109+ elif "571" in chip_name :
110+ mcu_package = 1
111+ elif "572" in chip_name :
112+ mcu_package = 2
113+ elif "573" in chip_name :
114+ mcu_package = 3
115+ else :
116+ sys .stdout .write ("Unknown CH57x variant %s\n " % chip_name )
117+ env .Exit (- 1 )
118+ target_mcu_ld = 10
119+ elif chip_name .startswith ("ch58" ):
120+ # CH582 / CH583 / CH584 / CH585
121+ target_mcu = "CH58X"
122+ if "582" in chip_name :
123+ mcu_package = 2
124+ elif "583" in chip_name :
125+ mcu_package = 3
126+ elif "584" in chip_name :
127+ mcu_package = 4
128+ elif "585" in chip_name :
129+ mcu_package = 5
130+ else :
131+ sys .stdout .write ("Unknown CH58x variant %s\n " % chip_name )
132+ env .Exit (- 1 )
133+ target_mcu_ld = 8
134+ elif chip_name .startswith ("ch59" ):
135+ # CH591 / CH592
136+ target_mcu = "CH59X"
137+ if "591" in chip_name :
138+ mcu_package = 1
139+ elif "592" in chip_name :
140+ mcu_package = 2
141+ else :
142+ sys .stdout .write ("Unknown CH59x variant %s\n " % chip_name )
143+ env .Exit (- 1 )
144+ target_mcu_ld = 9
145+ elif chip_name .startswith ("ch32h41" ):
146+ target_mcu = chip_name .upper ()[0 :len ("ch32h41x" )]
147+ mcu_package = 1
148+ if "416" in chip_name :
149+ mcu_package = 2
150+ elif "415" in chip_name :
151+ mcu_package = 3
152+ target_mcu_ld = 11
93153 else :
94- sys .stdout .write ("Unkonwn MCU %s\n " % chip_name )
154+ sys .stdout .write ("Unknown MCU %s\n " % chip_name )
95155 env .Exit (- 1 )
96156 return (target_mcu , mcu_package , target_mcu_ld )
97157
@@ -101,6 +161,15 @@ def get_ld_defines(chip_name: str):
101161# retrieve needed macro values
102162target_mcu , mcu_package , target_mcu_ld = get_ld_defines (chip_name )
103163
164+ # some header files also use these macros, so inject them
165+ env .Append (
166+ CPPDEFINES = [
167+ ("TARGET_MCU" , target_mcu ),
168+ ("MCU_PACKAGE" , mcu_package ),
169+ ("TARGET_MCU_LD" , target_mcu_ld )
170+ ]
171+ )
172+
104173# Let the LD script be generated right before the .elf is built
105174env .AddPreAction (
106175 "$BUILD_DIR/${PROGNAME}.elf" ,
0 commit comments