Skip to content

Commit a30c57d

Browse files
committed
[stm32variant] Fix AFIO definition for F1
Add default AFIO to disable some remapping, used when: <RemapBlock Name="TIM2_REMAP0" DefaultRemap="true" /> is present in xml file. It allows to disable properly to the default remap. Signed-off-by: Frederic Pillon <[email protected]>
1 parent 0b4c5f7 commit a30c57d

File tree

1 file changed

+128
-43
lines changed

1 file changed

+128
-43
lines changed

CI/utils/stm32variant.py

Lines changed: 128 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,119 @@
6666
#endif
6767
"""
6868

69+
# Default AFIO to disable some remapping, used when:
70+
# <RemapBlock Name="TIM2_REMAP0" DefaultRemap="true" />
71+
# is present in xml file
72+
default_afio_f1 = {
73+
"PA0": {"TIM2": "AFIO_TIM2_DISABLE", "USART2": "AFIO_USART2_DISABLE"},
74+
"PA1": {"TIM2": "AFIO_TIM2_DISABLE", "USART2": "AFIO_USART2_DISABLE"},
75+
"PA2": {
76+
"TIM2": "AFIO_TIM2_DISABLE",
77+
"TIM9": "AFIO_TIM9_DISABLE",
78+
"TIM15": "AFIO_TIM15_DISABLE",
79+
"USART2": "AFIO_USART2_DISABLE",
80+
},
81+
"PA3": {
82+
"TIM2": "AFIO_TIM2_DISABLE",
83+
"TIM9": "AFIO_TIM9_DISABLE",
84+
"TIM15": "AFIO_TIM15_DISABLE",
85+
"USART2": "AFIO_USART2_DISABLE",
86+
},
87+
"PA4": {"SPI1": "AFIO_SPI1_DISABLE", "USART2": "AFIO_USART2_DISABLE"},
88+
"PA5": {"SPI1": "AFIO_SPI1_DISABLE"},
89+
"PA6": {
90+
"SPI1": "AFIO_SPI1_DISABLE",
91+
"TIM3": "AFIO_TIM3_DISABLE",
92+
"TIM13": "AFIO_TIM13_DISABLE",
93+
},
94+
"PA7": {
95+
"ETH": "AFIO_ETH_DISABLE",
96+
"SPI1": "AFIO_SPI1_DISABLE",
97+
"TIM3": "AFIO_TIM3_DISABLE",
98+
"TIM14": "AFIO_TIM14_DISABLE",
99+
},
100+
"PA8": {"TIM1": "AFIO_TIM1_DISABLE"},
101+
"PA9": {"TIM1": "AFIO_TIM1_DISABLE", "USART1": "AFIO_USART1_DISABLE"},
102+
"PA10": {"TIM1": "AFIO_TIM1_DISABLE", "USART1": "AFIO_USART1_DISABLE"},
103+
"PA11": {"CAN1": "AFIO_CAN1_1", "TIM1": "AFIO_TIM1_DISABLE"},
104+
"PA12": {"CAN1": "AFIO_CAN1_1", "TIM1": "AFIO_TIM1_DISABLE"},
105+
"PA15": {"SPI3": "AFIO_SPI3_DISABLE"},
106+
"PB0": {"ETH": "AFIO_ETH_DISABLE", "TIM3": "AFIO_TIM3_DISABLE"},
107+
"PB1": {"ETH": "AFIO_ETH_DISABLE", "TIM3": "AFIO_TIM3_DISABLE"},
108+
"PB3": {"SPI3": "AFIO_SPI3_DISABLE"},
109+
"PB4": {"SPI3": "AFIO_SPI3_DISABLE"},
110+
"PB5": {"SPI3": "AFIO_SPI3_DISABLE"},
111+
"PB6": {"I2C1": "AFIO_I2C1_DISABLE", "TIM4": "AFIO_TIM4_DISABLE"},
112+
"PB7": {"I2C1": "AFIO_I2C1_DISABLE", "TIM4": "AFIO_TIM4_DISABLE"},
113+
"PB8": {
114+
"TIM4": "AFIO_TIM4_DISABLE",
115+
"TIM10": "AFIO_TIM10_DISABLE",
116+
"TIM16": "AFIO_TIM16_DISABLE",
117+
},
118+
"PB9": {
119+
"TIM4": "AFIO_TIM4_DISABLE",
120+
"TIM11": "AFIO_TIM11_DISABLE",
121+
"TIM17": "AFIO_TIM17_DISABLE",
122+
},
123+
"PB12": {
124+
"CAN2": "AFIO_CAN2_DISABLE",
125+
"TIM1": "AFIO_TIM1_DISABLE",
126+
"USART3": "AFIO_USART3_DISABLE",
127+
},
128+
"PB13": {
129+
"CAN2": "AFIO_CAN2_DISABLE",
130+
"TIM1": "AFIO_TIM1_DISABLE",
131+
"USART3": "AFIO_USART3_DISABLE",
132+
},
133+
"PB14": {"TIM1": "AFIO_TIM1_DISABLE"},
134+
"PB15": {"TIM1": "AFIO_TIM1_DISABLE"},
135+
"PC4": {"ETH": "AFIO_ETH_DISABLE", "TIM12": "AFIO_TIM12_DISABLE"},
136+
"PC5": {"ETH": "AFIO_ETH_DISABLE", "TIM12": "AFIO_TIM12_DISABLE"},
137+
"PC8": {"TIM13": "AFIO_TIM13_DISABLE"},
138+
"PC9": {"TIM14": "AFIO_TIM14_DISABLE"},
139+
"PC10": {"USART3": "AFIO_USART3_DISABLE"},
140+
"PC11": {"USART3": "AFIO_USART3_DISABLE"},
141+
"PC12": {"USART3": "AFIO_USART3_DISABLE"},
142+
}
143+
144+
# Choice is based on the fact Tone and Servo do not need output nor compare
145+
# capabilities, and thus select timer instance which have the less outputs/compare
146+
# capabilities:
147+
# - TIM6/TIM7/TIM18 because they have no output and no compare capabilities
148+
# - TIM10/TIM11/TIM13/TIM14 only 1 compare channel no complementary
149+
# - TIM16/TIM17 generally only 1 compare channel (with complementary)
150+
# - TIM9/TIM12/TIM21/TIM22 2 compare channels (no complementary)
151+
# - TIM15 generally 2 compare channel (with potentially complementary)
152+
# - TIM3/TIM4/TIM19 up to 4 channels
153+
# - TIM2/TIM5 (most of the time) the only 32bit timer. Could be reserved
154+
# for further 32bit support
155+
# - TIM1/TIM8/TIM20 they are the most advanced/complete timers
156+
157+
tim_inst_order = [
158+
"TIM6",
159+
"TIM7",
160+
"TIM18",
161+
"TIM10",
162+
"TIM11",
163+
"TIM13",
164+
"TIM14",
165+
"TIM16",
166+
"TIM17",
167+
"TIM9",
168+
"TIM12",
169+
"TIM21",
170+
"TIM22",
171+
"TIM15",
172+
"TIM3",
173+
"TIM4",
174+
"TIM19",
175+
"TIM2",
176+
"TIM5",
177+
"TIM1",
178+
"TIM8",
179+
"TIM20",
180+
]
181+
69182

70183
def rm_tree(pth: Path):
71184
if pth.exists():
@@ -197,8 +310,18 @@ def get_gpio_af_num(pintofind, iptofind):
197310
return mygpioaf
198311

199312

313+
def get_gpio_af_numF1_default(pintofind, iptofind):
314+
# return "AFIO_" + iptofind .split("_")[0] + "_DISABLE"
315+
ip = iptofind.split("_")[0]
316+
afio_default = "AFIO_NONE"
317+
if pintofind in default_afio_f1:
318+
if ip in default_afio_f1[pintofind]:
319+
afio_default = default_afio_f1[pintofind][ip]
320+
return afio_default
321+
322+
200323
def get_gpio_af_numF1(pintofind, iptofind):
201-
# print ('pin to find ' + pintofind + ' ip to find ' + iptofind)
324+
# print ('pin to find ' + pintofind + ' ip to find ' + iptofind)
202325
i = 0
203326
mygpioaf = ""
204327
for n in xml_gpio.documentElement.childNodes:
@@ -232,9 +355,9 @@ def get_gpio_af_numF1(pintofind, iptofind):
232355
p.nodeType == Node.ELEMENT_NODE
233356
and p.hasChildNodes() is False
234357
):
235-
if mygpioaf != "":
236-
mygpioaf += " "
237-
mygpioaf += "AFIO_NONE"
358+
mygpioaf += (
359+
" " if mygpioaf != "" else ""
360+
) + get_gpio_af_numF1_default(pintofind, iptofind)
238361
else:
239362
for s in p.childNodes:
240363
if s.nodeType != Node.ELEMENT_NODE:
@@ -254,7 +377,7 @@ def get_gpio_af_numF1(pintofind, iptofind):
254377
).replace("_REMAP", "")
255378
# print mygpioaf
256379
if mygpioaf == "":
257-
mygpioaf = "AFIO_NONE"
380+
mygpioaf = get_gpio_af_numF1_default(pintofind, iptofind)
258381
return mygpioaf
259382

260383

@@ -1089,44 +1212,6 @@ def serial_pins_variant():
10891212

10901213

10911214
def timer_variant():
1092-
# Choice is based on the fact Tone and Servo do not need output nor compare
1093-
# capabilities, and thus select timer instance which have the less outputs/compare
1094-
# capabilities:
1095-
# - TIM6/TIM7/TIM18 because they have no output and no compare capabilities
1096-
# - TIM10/TIM11/TIM13/TIM14 only 1 compare channel no complementary
1097-
# - TIM16/TIM17 generally only 1 compare channel (with complementary)
1098-
# - TIM9/TIM12/TIM21/TIM22 2 compare channels (no complementary)
1099-
# - TIM15 generally 2 compare channel (with potentially complementary)
1100-
# - TIM3/TIM4/TIM19 up to 4 channels
1101-
# - TIM2/TIM5 (most of the time) the only 32bit timer. Could be reserved
1102-
# for further 32bit support
1103-
# - TIM1/TIM8/TIM20 they are the most advanced/complete timers
1104-
1105-
tim_inst_order = [
1106-
"TIM6",
1107-
"TIM7",
1108-
"TIM18",
1109-
"TIM10",
1110-
"TIM11",
1111-
"TIM13",
1112-
"TIM14",
1113-
"TIM16",
1114-
"TIM17",
1115-
"TIM9",
1116-
"TIM12",
1117-
"TIM21",
1118-
"TIM22",
1119-
"TIM15",
1120-
"TIM3",
1121-
"TIM4",
1122-
"TIM19",
1123-
"TIM2",
1124-
"TIM5",
1125-
"TIM1",
1126-
"TIM8",
1127-
"TIM20",
1128-
]
1129-
11301215
tone = servo = "TIMx"
11311216
if tim_inst_list:
11321217
for pref in tim_inst_order:

0 commit comments

Comments
 (0)