23#include "px_stm32cube.h"
35#if PX_EXTI_CFG_INT0_EN
38#if PX_EXTI_CFG_INT1_EN
41#if PX_EXTI_CFG_INT2_EN
44#if PX_EXTI_CFG_INT3_EN
47#if PX_EXTI_CFG_INT4_EN
50#if PX_EXTI_CFG_INT5_EN
53#if PX_EXTI_CFG_INT6_EN
56#if PX_EXTI_CFG_INT7_EN
59#if PX_EXTI_CFG_INT8_EN
62#if PX_EXTI_CFG_INT9_EN
65#if PX_EXTI_CFG_INT10_EN
68#if PX_EXTI_CFG_INT11_EN
71#if PX_EXTI_CFG_INT12_EN
74#if PX_EXTI_CFG_INT13_EN
77#if PX_EXTI_CFG_INT14_EN
80#if PX_EXTI_CFG_INT15_EN
87#if PX_EXTI_CFG_INT0_EN || PX_EXTI_CFG_INT1_EN
88void EXTI0_1_IRQHandler(
void)
90#if PX_EXTI_CFG_INT0_EN
91 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_0))
93 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_0);
94 if(px_exti_0_handler) (*px_exti_0_handler)();
97#if PX_EXTI_CFG_INT1_EN
98 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_1))
100 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_1);
101 if(px_exti_1_handler) (*px_exti_1_handler)();
107#if PX_EXTI_CFG_INT2_EN || PX_EXTI_CFG_INT3_EN
108void EXTI2_3_IRQHandler(
void)
110#if PX_EXTI_CFG_INT2_EN
111 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_2))
113 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_2);
114 if(px_exti_2_handler) (*px_exti_2_handler)();
117#if PX_EXTI_CFG_INT3_EN
118 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_3))
120 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_3);
121 if(px_exti_3_handler) (*px_exti_3_handler)();
127#if PX_EXTI_CFG_INT4_EN || PX_EXTI_CFG_INT5_EN || PX_EXTI_CFG_INT6_EN \
128 || PX_EXTI_CFG_INT7_EN || PX_EXTI_CFG_INT8_EN || PX_EXTI_CFG_INT9_EN \
129 || PX_EXTI_CFG_INT10_EN || PX_EXTI_CFG_INT11_EN || PX_EXTI_CFG_INT12_EN \
130 || PX_EXTI_CFG_INT13_EN || PX_EXTI_CFG_INT14_EN || PX_EXTI_CFG_INT15_EN
131void EXTI4_15_IRQHandler(
void)
133#if PX_EXTI_CFG_INT4_EN
134 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_4))
136 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_4);
137 if(px_exti_4_handler) (*px_exti_4_handler)();
140#if PX_EXTI_CFG_INT5_EN
141 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_5))
143 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_5);
144 if(px_exti_5_handler) (*px_exti_5_handler)();
147#if PX_EXTI_CFG_INT6_EN
148 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_6))
150 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_6);
151 if(px_exti_6_handler) (*px_exti_6_handler)();
154#if PX_EXTI_CFG_INT7_EN
155 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_7))
157 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_7);
158 if(px_exti_7_handler) (*px_exti_7_handler)();
161#if PX_EXTI_CFG_INT8_EN
162 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_8))
164 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_8);
165 if(px_exti_8_handler) (*px_exti_8_handler)();
168#if PX_EXTI_CFG_INT9_EN
169 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_9))
171 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_9);
172 if(px_exti_9_handler) (*px_exti_9_handler)();
175#if PX_EXTI_CFG_INT10_EN
176 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_10))
178 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_10);
179 if(px_exti_10_handler) (*px_exti_10_handler)();
182#if PX_EXTI_CFG_INT11_EN
183 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_11))
185 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_11);
186 if(px_exti_11_handler) (*px_exti_11_handler)();
189#if PX_EXTI_CFG_INT12_EN
190 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_12))
192 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_12);
193 if(px_exti_12_handler) (*px_exti_12_handler)();
196#if PX_EXTI_CFG_INT13_EN
197 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_13))
199 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_13);
200 if(px_exti_13_handler) (*px_exti_13_handler)();
203#if PX_EXTI_CFG_INT14_EN
204 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_14))
206 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_14);
207 if(px_exti_14_handler) (*px_exti_14_handler)();
210#if PX_EXTI_CFG_INT15_EN
211 if(LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_15))
213 LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_15);
214 if(px_exti_15_handler) (*px_exti_15_handler)();
223#if PX_EXTI_CFG_INT0_EN || PX_EXTI_CFG_INT1_EN
224 NVIC_EnableIRQ(EXTI0_1_IRQn);
226#if PX_EXTI_CFG_INT2_EN || PX_EXTI_CFG_INT3_EN
227 NVIC_EnableIRQ(EXTI2_3_IRQn);
229#if PX_EXTI_CFG_INT4_EN || PX_EXTI_CFG_INT5_EN || PX_EXTI_CFG_INT6_EN \
230 || PX_EXTI_CFG_INT7_EN || PX_EXTI_CFG_INT8_EN || PX_EXTI_CFG_INT9_EN \
231 || PX_EXTI_CFG_INT10_EN || PX_EXTI_CFG_INT11_EN || PX_EXTI_CFG_INT12_EN \
232 || PX_EXTI_CFG_INT13_EN || PX_EXTI_CFG_INT14_EN || PX_EXTI_CFG_INT15_EN
233 NVIC_EnableIRQ(EXTI4_15_IRQn);
243#if PX_EXTI_CFG_INT0_EN
245 px_exti_0_handler = exti_handler;
246 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE0);
249#if PX_EXTI_CFG_INT1_EN
251 px_exti_1_handler = exti_handler;
252 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE1);
255#if PX_EXTI_CFG_INT2_EN
257 px_exti_2_handler = exti_handler;
258 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE2);
261#if PX_EXTI_CFG_INT3_EN
263 px_exti_3_handler = exti_handler;
264 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE3);
267#if PX_EXTI_CFG_INT4_EN
269 px_exti_4_handler = exti_handler;
270 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE4);
273#if PX_EXTI_CFG_INT5_EN
275 px_exti_5_handler = exti_handler;
276 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE5);
279#if PX_EXTI_CFG_INT6_EN
281 px_exti_6_handler = exti_handler;
282 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE6);
285#if PX_EXTI_CFG_INT7_EN
287 px_exti_7_handler = exti_handler;
288 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE7);
291#if PX_EXTI_CFG_INT8_EN
293 px_exti_8_handler = exti_handler;
294 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE8);
297#if PX_EXTI_CFG_INT9_EN
299 px_exti_9_handler = exti_handler;
300 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE9);
303#if PX_EXTI_CFG_INT10_EN
304 case PX_EXTI_LINE_10:
305 px_exti_10_handler = exti_handler;
306 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE10);
309#if PX_EXTI_CFG_INT11_EN
310 case PX_EXTI_LINE_11:
311 px_exti_11_handler = exti_handler;
312 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE11);
315#if PX_EXTI_CFG_INT12_EN
316 case PX_EXTI_LINE_12:
317 px_exti_12_handler = exti_handler;
318 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE12);
321#if PX_EXTI_CFG_INT13_EN
322 case PX_EXTI_LINE_13:
323 px_exti_13_handler = exti_handler;
324 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE13);
327#if PX_EXTI_CFG_INT14_EN
328 case PX_EXTI_LINE_14:
329 px_exti_14_handler = exti_handler;
330 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE14);
333#if PX_EXTI_CFG_INT15_EN
334 case PX_EXTI_LINE_15:
335 px_exti_15_handler = exti_handler;
336 LL_SYSCFG_SetEXTISource(exti_port, LL_SYSCFG_EXTI_LINE15);
340 PX_LOG_E(
"Invalid EXTI line specified");
347 uint32_t exti_line_mask = (1 << exti_line);
351 case PX_EXTI_TYPE_FALLING_EDGE:
352 LL_EXTI_EnableFallingTrig_0_31(exti_line_mask);
353 LL_EXTI_DisableRisingTrig_0_31(exti_line_mask);
355 case PX_EXTI_TYPE_RISING_EDGE:
356 LL_EXTI_EnableRisingTrig_0_31(exti_line_mask);
357 LL_EXTI_DisableFallingTrig_0_31(exti_line_mask);
359 case PX_EXTI_TYPE_BOTH_EDGES:
360 LL_EXTI_EnableFallingTrig_0_31(exti_line_mask);
361 LL_EXTI_EnableRisingTrig_0_31(exti_line_mask);
364 PX_LOG_E(
"Invalid EXTI type specified");
371 uint32_t exti_line_mask = (1 << exti_line);
373 LL_EXTI_EnableIT_0_31(exti_line_mask);
378 uint32_t exti_line_mask = (1 << exti_line);
380 LL_EXTI_DisableIT_0_31(exti_line_mask);
#define PX_LOG_NAME(name)
Macro to declare a log name string once for each file to reduce code size.
#define PX_LOG_E(format,...)
Macro to display a formatted ERROR message.
px_exti_port_t
External interrupt port.
void px_exti_type_set(px_exti_line_t exti_line, px_exti_type_t exti_type)
Set External Interrupt type (fallig or rising edge or both)
void px_exti_disable(px_exti_line_t exti_line)
Disable External Interrupt.
void px_exti_init(void)
Initialise External Interrupt driver.
void px_exti_enable(px_exti_line_t exti_line)
Enable External Interrupt.
px_exti_type_t
External interrupt type.
px_exti_line_t
External Interupt line.
void(* px_exti_handler_t)(void)
Definition for a pointer to a function that will be called when the external interrupt triggers.
void px_exti_open(px_exti_port_t exti_port, px_exti_line_t exti_line, px_exti_handler_t exti_handler)
Configure External Interrupt.