aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32/src
diff options
context:
space:
mode:
authorxoviat <[email protected]>2021-03-19 15:26:20 -0500
committerxoviat <[email protected]>2021-03-19 15:26:20 -0500
commit03ecc91d552328f625c3ed13088291272123784f (patch)
treebb2b333b5cd66b5443fd3aedd8e1f181848c55cf /embassy-stm32/src
parentc8d90f3e75aca252cda49192d61a6b4a756c106b (diff)
stm32: consolidate functionality into new pkg
Diffstat (limited to 'embassy-stm32/src')
-rw-r--r--embassy-stm32/src/fmt.rs114
-rw-r--r--embassy-stm32/src/interrupt.rs1127
-rw-r--r--embassy-stm32/src/lib.rs35
3 files changed, 1276 insertions, 0 deletions
diff --git a/embassy-stm32/src/fmt.rs b/embassy-stm32/src/fmt.rs
new file mode 100644
index 000000000..160642ccd
--- /dev/null
+++ b/embassy-stm32/src/fmt.rs
@@ -0,0 +1,114 @@
1#![macro_use]
2#![allow(clippy::module_inception)]
3#![allow(unused)]
4
5#[cfg(all(feature = "defmt", feature = "log"))]
6compile_error!("You may not enable both `defmt` and `log` features.");
7
8pub use fmt::*;
9
10#[cfg(feature = "defmt")]
11mod fmt {
12 pub use defmt::{
13 assert, assert_eq, assert_ne, debug, debug_assert, debug_assert_eq, debug_assert_ne, error,
14 info, panic, todo, trace, unreachable, unwrap, warn,
15 };
16}
17
18#[cfg(feature = "log")]
19mod fmt {
20 pub use core::{
21 assert, assert_eq, assert_ne, debug_assert, debug_assert_eq, debug_assert_ne, panic, todo,
22 unreachable,
23 };
24 pub use log::{debug, error, info, trace, warn};
25}
26
27#[cfg(not(any(feature = "defmt", feature = "log")))]
28mod fmt {
29 #![macro_use]
30
31 pub use core::{
32 assert, assert_eq, assert_ne, debug_assert, debug_assert_eq, debug_assert_ne, panic, todo,
33 unreachable,
34 };
35
36 macro_rules! trace {
37 ($($msg:expr),+ $(,)?) => {
38 ()
39 };
40 }
41
42 macro_rules! debug {
43 ($($msg:expr),+ $(,)?) => {
44 ()
45 };
46 }
47
48 macro_rules! info {
49 ($($msg:expr),+ $(,)?) => {
50 ()
51 };
52 }
53
54 macro_rules! warn {
55 ($($msg:expr),+ $(,)?) => {
56 ()
57 };
58 }
59
60 macro_rules! error {
61 ($($msg:expr),+ $(,)?) => {
62 ()
63 };
64 }
65}
66
67#[cfg(not(feature = "defmt"))]
68macro_rules! unwrap {
69 ($arg:expr) => {
70 match $crate::fmt::Try::into_result($arg) {
71 ::core::result::Result::Ok(t) => t,
72 ::core::result::Result::Err(e) => {
73 ::core::panic!("unwrap of `{}` failed: {:?}", ::core::stringify!($arg), e);
74 }
75 }
76 };
77 ($arg:expr, $($msg:expr),+ $(,)? ) => {
78 match $crate::fmt::Try::into_result($arg) {
79 ::core::result::Result::Ok(t) => t,
80 ::core::result::Result::Err(e) => {
81 ::core::panic!("unwrap of `{}` failed: {}: {:?}", ::core::stringify!($arg), ::core::format_args!($($msg,)*), e);
82 }
83 }
84 }
85}
86
87#[derive(Debug, Copy, Clone, Eq, PartialEq)]
88pub struct NoneError;
89
90pub trait Try {
91 type Ok;
92 type Error;
93 fn into_result(self) -> Result<Self::Ok, Self::Error>;
94}
95
96impl<T> Try for Option<T> {
97 type Ok = T;
98 type Error = NoneError;
99
100 #[inline]
101 fn into_result(self) -> Result<T, NoneError> {
102 self.ok_or(NoneError)
103 }
104}
105
106impl<T, E> Try for Result<T, E> {
107 type Ok = T;
108 type Error = E;
109
110 #[inline]
111 fn into_result(self) -> Self {
112 self
113 }
114}
diff --git a/embassy-stm32/src/interrupt.rs b/embassy-stm32/src/interrupt.rs
new file mode 100644
index 000000000..5ad7ef8ef
--- /dev/null
+++ b/embassy-stm32/src/interrupt.rs
@@ -0,0 +1,1127 @@
1//! Interrupt management
2//!
3//! This module implements an API for managing interrupts compatible with
4//! nrf_softdevice::interrupt. Intended for switching between the two at compile-time.
5
6use core::sync::atomic::{compiler_fence, Ordering};
7
8use crate::pac::NVIC_PRIO_BITS;
9
10// Re-exports
11pub use cortex_m::interrupt::{CriticalSection, Mutex};
12pub use embassy::interrupt::{declare, take, Interrupt};
13
14#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd)]
15#[cfg_attr(feature = "defmt", derive(defmt::Format))]
16#[repr(u8)]
17pub enum Priority {
18 Level0 = 0,
19 Level1 = 1,
20 Level2 = 2,
21 Level3 = 3,
22 Level4 = 4,
23 Level5 = 5,
24 Level6 = 6,
25 Level7 = 7,
26 Level8 = 8,
27 Level9 = 9,
28 Level10 = 10,
29 Level11 = 11,
30 Level12 = 12,
31 Level13 = 13,
32 Level14 = 14,
33 Level15 = 15,
34}
35
36impl From<u8> for Priority {
37 fn from(priority: u8) -> Self {
38 match priority >> (8 - NVIC_PRIO_BITS) {
39 0 => Self::Level0,
40 1 => Self::Level1,
41 2 => Self::Level2,
42 3 => Self::Level3,
43 4 => Self::Level4,
44 5 => Self::Level5,
45 6 => Self::Level6,
46 7 => Self::Level7,
47 8 => Self::Level8,
48 9 => Self::Level9,
49 10 => Self::Level10,
50 11 => Self::Level11,
51 12 => Self::Level12,
52 13 => Self::Level13,
53 14 => Self::Level14,
54 15 => Self::Level15,
55 _ => unreachable!(),
56 }
57 }
58}
59
60impl From<Priority> for u8 {
61 fn from(p: Priority) -> Self {
62 (p as u8) << (8 - NVIC_PRIO_BITS)
63 }
64}
65
66#[inline]
67pub fn free<F, R>(f: F) -> R
68where
69 F: FnOnce(&CriticalSection) -> R,
70{
71 unsafe {
72 // TODO: assert that we're in privileged level
73 // Needed because disabling irqs in non-privileged level is a noop, which would break safety.
74
75 let primask: u32;
76 asm!("mrs {}, PRIMASK", out(reg) primask);
77
78 asm!("cpsid i");
79
80 // Prevent compiler from reordering operations inside/outside the critical section.
81 compiler_fence(Ordering::SeqCst);
82
83 let r = f(&CriticalSection::new());
84
85 compiler_fence(Ordering::SeqCst);
86
87 if primask & 1 == 0 {
88 asm!("cpsie i");
89 }
90
91 r
92 }
93}
94
95#[cfg(feature = "stm32f401")]
96mod irqs {
97 use super::*;
98 declare!(PVD);
99 declare!(TAMP_STAMP);
100 declare!(RTC_WKUP);
101 declare!(FLASH);
102 declare!(RCC);
103 declare!(EXTI0);
104 declare!(EXTI1);
105 declare!(EXTI2);
106 declare!(EXTI3);
107 declare!(EXTI4);
108 declare!(DMA1_STREAM0);
109 declare!(DMA1_STREAM1);
110 declare!(DMA1_STREAM2);
111 declare!(DMA1_STREAM3);
112 declare!(DMA1_STREAM4);
113 declare!(DMA1_STREAM5);
114 declare!(DMA1_STREAM6);
115 declare!(ADC);
116 declare!(EXTI9_5);
117 declare!(TIM1_BRK_TIM9);
118 declare!(TIM1_UP_TIM10);
119 declare!(TIM1_TRG_COM_TIM11);
120 declare!(TIM1_CC);
121 declare!(TIM2);
122 declare!(TIM3);
123 declare!(TIM4);
124 declare!(I2C1_EV);
125 declare!(I2C1_ER);
126 declare!(I2C2_EV);
127 declare!(I2C2_ER);
128 declare!(SPI1);
129 declare!(SPI2);
130 declare!(USART1);
131 declare!(USART2);
132 declare!(EXTI15_10);
133 declare!(RTC_ALARM);
134 declare!(OTG_FS_WKUP);
135 declare!(DMA1_STREAM7);
136 declare!(SDIO);
137 declare!(TIM5);
138 declare!(SPI3);
139 declare!(DMA2_STREAM0);
140 declare!(DMA2_STREAM1);
141 declare!(DMA2_STREAM2);
142 declare!(DMA2_STREAM3);
143 declare!(DMA2_STREAM4);
144 declare!(OTG_FS);
145 declare!(DMA2_STREAM5);
146 declare!(DMA2_STREAM6);
147 declare!(DMA2_STREAM7);
148 declare!(USART6);
149 declare!(I2C3_EV);
150 declare!(I2C3_ER);
151 declare!(FPU);
152 declare!(SPI4);
153}
154
155#[cfg(feature = "stm32f405")]
156mod irqs {
157 use super::*;
158 declare!(WWDG);
159 declare!(PVD);
160 declare!(TAMP_STAMP);
161 declare!(RTC_WKUP);
162 // declare!(FLASH);
163 declare!(RCC);
164 declare!(EXTI0);
165 declare!(EXTI1);
166 declare!(EXTI2);
167 declare!(EXTI3);
168 declare!(EXTI4);
169 declare!(DMA1_STREAM0);
170 declare!(DMA1_STREAM1);
171 declare!(DMA1_STREAM2);
172 declare!(DMA1_STREAM3);
173 declare!(DMA1_STREAM4);
174 declare!(DMA1_STREAM5);
175 declare!(DMA1_STREAM6);
176 declare!(ADC);
177 declare!(CAN1_TX);
178 declare!(CAN1_RX0);
179 declare!(CAN1_RX1);
180 declare!(CAN1_SCE);
181 declare!(EXTI9_5);
182 declare!(TIM1_BRK_TIM9);
183 declare!(TIM1_UP_TIM10);
184 declare!(TIM1_TRG_COM_TIM11);
185 declare!(TIM1_CC);
186 declare!(TIM2);
187 declare!(TIM3);
188 declare!(TIM4);
189 declare!(I2C1_EV);
190 declare!(I2C1_ER);
191 declare!(I2C2_EV);
192 declare!(I2C2_ER);
193 declare!(SPI1);
194 declare!(SPI2);
195 declare!(USART1);
196 declare!(USART2);
197 declare!(USART3);
198 declare!(EXTI15_10);
199 declare!(RTC_ALARM);
200 declare!(OTG_FS_WKUP);
201 declare!(TIM8_BRK_TIM12);
202 declare!(TIM8_UP_TIM13);
203 declare!(TIM8_TRG_COM_TIM14);
204 declare!(TIM8_CC);
205 declare!(DMA1_STREAM7);
206 // declare!(FMC);
207 declare!(SDIO);
208 declare!(TIM5);
209 declare!(SPI3);
210 declare!(UART4);
211 declare!(UART5);
212 declare!(TIM6_DAC);
213 declare!(TIM7);
214 declare!(DMA2_STREAM0);
215 declare!(DMA2_STREAM1);
216 declare!(DMA2_STREAM2);
217 declare!(DMA2_STREAM3);
218 declare!(DMA2_STREAM4);
219 declare!(ETH);
220 declare!(ETH_WKUP);
221 declare!(CAN2_TX);
222 declare!(CAN2_RX0);
223 declare!(CAN2_RX1);
224 declare!(CAN2_SCE);
225 declare!(OTG_FS);
226 declare!(DMA2_STREAM5);
227 declare!(DMA2_STREAM6);
228 declare!(DMA2_STREAM7);
229 declare!(USART6);
230 declare!(I2C3_EV);
231 declare!(I2C3_ER);
232 declare!(OTG_HS_EP1_OUT);
233 declare!(OTG_HS_EP1_IN);
234 declare!(OTG_HS_WKUP);
235 declare!(OTG_HS);
236 declare!(DCMI);
237 declare!(CRYP);
238 declare!(HASH_RNG);
239 declare!(FPU);
240 // declare!(UART7);
241 // declare!(UART8);
242 // declare!(SPI4);
243 // declare!(SPI5);
244 // declare!(SPI6);
245 // declare!(SAI1);
246 declare!(LCD_TFT);
247 declare!(LCD_TFT_1);
248 // declare!(DMA2D);
249}
250
251#[cfg(feature = "stm32f407")]
252mod irqs {
253 use super::*;
254
255 declare!(WWDG);
256 declare!(PVD);
257 declare!(TAMP_STAMP);
258 declare!(RTC_WKUP);
259 declare!(RCC);
260 declare!(EXTI0);
261 declare!(EXTI1);
262 declare!(EXTI2);
263 declare!(EXTI3);
264 declare!(EXTI4);
265 declare!(DMA1_STREAM0);
266 declare!(DMA1_STREAM1);
267 declare!(DMA1_STREAM2);
268 declare!(DMA1_STREAM3);
269 declare!(DMA1_STREAM4);
270 declare!(DMA1_STREAM5);
271 declare!(DMA1_STREAM6);
272 declare!(ADC);
273 declare!(CAN1_TX);
274 declare!(CAN1_RX0);
275 declare!(CAN1_RX1);
276 declare!(CAN1_SCE);
277 declare!(EXTI9_5);
278 declare!(TIM1_BRK_TIM9);
279 declare!(TIM1_UP_TIM10);
280 declare!(TIM1_TRG_COM_TIM11);
281 declare!(TIM1_CC);
282 declare!(TIM2);
283 declare!(TIM3);
284 declare!(TIM4);
285 declare!(I2C1_EV);
286 declare!(I2C1_ER);
287 declare!(I2C2_EV);
288 declare!(I2C2_ER);
289 declare!(SPI1);
290 declare!(SPI2);
291 declare!(USART1);
292 declare!(USART2);
293 declare!(USART3);
294 declare!(EXTI15_10);
295 declare!(RTC_ALARM);
296 declare!(OTG_FS_WKUP);
297 declare!(TIM8_BRK_TIM12);
298 declare!(TIM8_UP_TIM13);
299 declare!(TIM8_TRG_COM_TIM14);
300 declare!(TIM8_CC);
301 declare!(DMA1_STREAM7);
302 declare!(FSMC);
303 declare!(SDIO);
304 declare!(TIM5);
305 declare!(SPI3);
306 declare!(UART4);
307 declare!(UART5);
308 declare!(TIM6_DAC);
309 declare!(TIM7);
310 declare!(DMA2_STREAM0);
311 declare!(DMA2_STREAM1);
312 declare!(DMA2_STREAM2);
313 declare!(DMA2_STREAM3);
314 declare!(DMA2_STREAM4);
315 declare!(ETH);
316 declare!(ETH_WKUP);
317 declare!(CAN2_TX);
318 declare!(CAN2_RX0);
319 declare!(CAN2_RX1);
320 declare!(CAN2_SCE);
321 declare!(OTG_FS);
322 declare!(DMA2_STREAM5);
323 declare!(DMA2_STREAM6);
324 declare!(DMA2_STREAM7);
325 declare!(USART6);
326 declare!(I2C3_EV);
327 declare!(I2C3_ER);
328 declare!(OTG_HS_EP1_OUT);
329 declare!(OTG_HS_EP1_IN);
330 declare!(OTG_HS_WKUP);
331 declare!(OTG_HS);
332 declare!(DCMI);
333 declare!(CRYP);
334 declare!(HASH_RNG);
335 declare!(FPU);
336 declare!(LCD_TFT);
337 declare!(LCD_TFT_1);
338}
339
340#[cfg(feature = "stm32f410")]
341mod irqs {
342 use super::*;
343
344 declare!(WWDG);
345 declare!(PVD);
346 declare!(TAMP_STAMP);
347 declare!(RTC_WKUP);
348 declare!(FLASH);
349 declare!(RCC);
350 declare!(EXTI0);
351 declare!(EXTI1);
352 declare!(EXTI2);
353 declare!(EXTI3);
354 declare!(EXTI4);
355 declare!(DMA1_STREAM0);
356 declare!(DMA1_STREAM1);
357 declare!(DMA1_STREAM2);
358 declare!(DMA1_STREAM3);
359 declare!(DMA1_STREAM4);
360 declare!(DMA1_STREAM5);
361 declare!(DMA1_STREAM6);
362 declare!(ADC);
363 declare!(EXTI9_5);
364 declare!(TIM1_BRK_TIM9);
365 declare!(PWM1_UP);
366 declare!(TIM1_TRG_COM_TIM11);
367 declare!(TIM1_CC);
368 declare!(I2C1_EV);
369 declare!(I2C1_ER);
370 declare!(I2C2_EV);
371 declare!(I2C2_ER);
372 declare!(SPI1);
373 declare!(SPI2);
374 declare!(USART1);
375 declare!(USART2);
376 declare!(EXTI15_10);
377 declare!(RTC_ALARM);
378 declare!(DMA1_STREAM7);
379 declare!(TIM5);
380 declare!(TIM6_DAC1);
381 declare!(DMA2_STREAM0);
382 declare!(DMA2_STREAM1);
383 declare!(DMA2_STREAM2);
384 declare!(DMA2_STREAM3);
385 declare!(DMA2_STREAM4);
386 declare!(EXTI19);
387 declare!(DMA2_STREAM5);
388 declare!(DMA2_STREAM6);
389 declare!(DMA2_STREAM7);
390 declare!(USART6);
391 declare!(EXTI20);
392 declare!(RNG);
393 declare!(FPU);
394 declare!(SPI5);
395 declare!(I2C4_EV);
396 declare!(I2C4_ER);
397 declare!(LPTIM1);
398}
399
400#[cfg(feature = "stm32f411")]
401mod irqs {
402 use super::*;
403
404 declare!(WWDG);
405 declare!(PVD);
406 declare!(TAMP_STAMP);
407 declare!(RTC_WKUP);
408 declare!(FLASH);
409 declare!(RCC);
410 declare!(EXTI0);
411 declare!(EXTI1);
412 declare!(EXTI2);
413 declare!(EXTI3);
414 declare!(EXTI4);
415 declare!(DMA1_STREAM0);
416 declare!(DMA1_STREAM1);
417 declare!(DMA1_STREAM2);
418 declare!(DMA1_STREAM3);
419 declare!(DMA1_STREAM4);
420 declare!(DMA1_STREAM5);
421 declare!(DMA1_STREAM6);
422 declare!(ADC);
423 declare!(EXTI9_5);
424 declare!(TIM1_BRK_TIM9);
425 declare!(TIM1_UP_TIM10);
426 declare!(TIM1_TRG_COM_TIM11);
427 declare!(TIM1_CC);
428 declare!(TIM2);
429 declare!(TIM3);
430 declare!(TIM4);
431 declare!(I2C1_EV);
432 declare!(I2C1_ER);
433 declare!(I2C2_EV);
434 declare!(I2C2_ER);
435 declare!(SPI1);
436 declare!(SPI2);
437 declare!(USART1);
438 declare!(USART2);
439 declare!(EXTI15_10);
440 declare!(RTC_ALARM);
441 declare!(OTG_FS_WKUP);
442 declare!(DMA1_STREAM7);
443 declare!(SDIO);
444 declare!(TIM5);
445 declare!(SPI3);
446 declare!(DMA2_STREAM0);
447 declare!(DMA2_STREAM1);
448 declare!(DMA2_STREAM2);
449 declare!(DMA2_STREAM3);
450 declare!(DMA2_STREAM4);
451 declare!(OTG_FS);
452 declare!(DMA2_STREAM5);
453 declare!(DMA2_STREAM6);
454 declare!(DMA2_STREAM7);
455 declare!(USART6);
456 declare!(I2C3_EV);
457 declare!(I2C3_ER);
458 declare!(FPU);
459 declare!(SPI4);
460 declare!(SPI5);
461}
462
463#[cfg(feature = "stm32f412")]
464mod irqs {
465 use super::*;
466
467 declare!(WWDG);
468 declare!(PVD);
469 declare!(TAMP_STAMP);
470 declare!(RTC_WKUP);
471 declare!(FLASH);
472 declare!(RCC);
473 declare!(EXTI0);
474 declare!(EXTI1);
475 declare!(EXTI2);
476 declare!(EXTI3);
477 declare!(EXTI4);
478 declare!(DMA1_STREAM0);
479 declare!(DMA1_STREAM1);
480 declare!(DMA1_STREAM2);
481 declare!(DMA1_STREAM3);
482 declare!(DMA1_STREAM4);
483 declare!(DMA1_STREAM5);
484 declare!(DMA1_STREAM6);
485 declare!(ADC);
486 declare!(CAN1_TX);
487 declare!(CAN1_RX0);
488 declare!(CAN1_RX1);
489 declare!(CAN1_SCE);
490 declare!(EXTI9_5);
491 declare!(TIM1_BRK_TIM9);
492 declare!(TIM1_UP_TIM10);
493 declare!(TIM1_TRG_COM_TIM11);
494 declare!(TIM1_CC);
495 declare!(TIM2);
496 declare!(TIM3);
497 declare!(TIM4);
498 declare!(I2C1_EV);
499 declare!(I2C1_ER);
500 declare!(I2C2_EV);
501 declare!(I2C2_ER);
502 declare!(SPI1);
503 declare!(SPI2);
504 declare!(USART1);
505 declare!(USART2);
506 declare!(USART3);
507 declare!(EXTI15_10);
508 declare!(RTC_ALARM);
509 declare!(OTG_FS_WKUP);
510 declare!(TIM12);
511 declare!(TIM13);
512 declare!(TIM14);
513 declare!(TIM8_CC);
514 declare!(DMA1_STREAM7);
515 declare!(FSMC);
516 declare!(SDIO);
517 declare!(TIM5);
518 declare!(SPI3);
519 declare!(TIM6_DACUNDER);
520 declare!(TIM7);
521 declare!(DMA2_STREAM0);
522 declare!(DMA2_STREAM1);
523 declare!(DMA2_STREAM2);
524 declare!(DMA2_STREAM3);
525 declare!(DMA2_STREAM4);
526 declare!(DFSDM1_FLT0);
527 declare!(DFSDM1_FLT1);
528 declare!(CAN2_TX);
529 declare!(CAN2_RX0);
530 declare!(CAN2_RX1);
531 declare!(CAN2_SCE);
532 declare!(OTG_FS);
533 declare!(DMA2_STREAM5);
534 declare!(DMA2_STREAM6);
535 declare!(DMA2_STREAM7);
536 declare!(USART6);
537 declare!(I2C3_EV);
538 declare!(I2C3_ER);
539 declare!(HASH_RNG);
540 declare!(FPU);
541 declare!(SPI4);
542 declare!(SPI5);
543 declare!(QUAD_SPI);
544 declare!(I2CFMP1_EVENT);
545 declare!(I2CFMP1_ERROR);
546}
547
548#[cfg(feature = "stm32f413")]
549mod irqs {
550 use super::*;
551
552 declare!(PVD);
553 declare!(TAMP_STAMP);
554 declare!(RTC_WKUP);
555 declare!(FLASH);
556 declare!(RCC);
557 declare!(EXTI0);
558 declare!(EXTI1);
559 declare!(EXTI2);
560 declare!(EXTI3);
561 declare!(EXTI4);
562 declare!(DMA1_STREAM0);
563 declare!(DMA1_STREAM1);
564 declare!(DMA1_STREAM2);
565 declare!(DMA1_STREAM3);
566 declare!(DMA1_STREAM4);
567 declare!(DMA1_STREAM5);
568 declare!(DMA1_STREAM6);
569 declare!(ADC);
570 declare!(CAN1_TX);
571 declare!(CAN1_RX0);
572 declare!(CAN1_RX1);
573 declare!(CAN1_SCE);
574 declare!(EXTI9_5);
575 declare!(TIM1_BRK_TIM9);
576 declare!(TIM1_UP_TIM10);
577 declare!(TIM1_TRG_COM_TIM11);
578 declare!(TIM1_CC);
579 declare!(TIM2);
580 declare!(TIM3);
581 declare!(TIM4);
582 declare!(I2C1_EVT);
583 declare!(I2C1_ERR);
584 declare!(I2C2_EVT);
585 declare!(I2C2_ERR);
586 declare!(SPI1);
587 declare!(SPI2);
588 declare!(USART1);
589 declare!(USART2);
590 declare!(USART3);
591 declare!(EXTI15_10);
592 declare!(EXTI17_RTC_ALARM);
593 declare!(TIM8_BRK_TIM12);
594 declare!(TIM8_UP_TIM13);
595 declare!(TIM8_TRG_COM_TIM14);
596 declare!(TIM8_CC);
597 declare!(DMA1_STREAM7);
598 declare!(FSMC);
599 declare!(SDIO);
600 declare!(TIM5);
601 declare!(SPI3);
602 declare!(USART4);
603 declare!(UART5);
604 declare!(TIM6_GLB_IT_DAC1_DAC2);
605 declare!(TIM7);
606 declare!(DMA2_STREAM0);
607 declare!(DMA2_STREAM1);
608 declare!(DMA2_STREAM2);
609 declare!(DMA2_STREAM3);
610 declare!(DMA2_STREAM4);
611 declare!(DFSDM1_FLT0);
612 declare!(DFSDM1_FLT1);
613 declare!(CAN2_TX);
614 declare!(CAN2_RX0);
615 declare!(CAN2_RX1);
616 declare!(CAN2_SCE);
617 declare!(OTG_FS);
618 declare!(DMA2_STREAM5);
619 declare!(DMA2_STREAM6);
620 declare!(DMA2_STREAM7);
621 declare!(USART6);
622 declare!(I2C3_EV);
623 declare!(I2C3_ER);
624 declare!(CAN3_TX);
625 declare!(CAN3_RX0);
626 declare!(CAN3_RX1);
627 declare!(CAN3_SCE);
628 declare!(CRYPTO);
629 declare!(RNG);
630 declare!(FPU);
631 declare!(USART7);
632 declare!(USART8);
633 declare!(SPI4);
634 declare!(SPI5);
635 declare!(SAI1);
636 declare!(UART9);
637 declare!(UART10);
638 declare!(QUADSPI);
639 declare!(I2CFMP1EVENT);
640 declare!(I2CFMP1ERROR);
641 declare!(LPTIM1_OR_IT_EIT_23);
642 declare!(DFSDM2_FILTER1);
643 declare!(DFSDM2_FILTER2);
644 declare!(DFSDM2_FILTER3);
645 declare!(DFSDM2_FILTER4);
646}
647
648#[cfg(feature = "stm32f427")]
649mod irqs {
650 use super::*;
651
652 declare!(WWDG);
653 declare!(PVD);
654 declare!(TAMP_STAMP);
655 declare!(RTC_WKUP);
656 declare!(FLASH);
657 declare!(RCC);
658 declare!(EXTI0);
659 declare!(EXTI1);
660 declare!(EXTI2);
661 declare!(EXTI3);
662 declare!(EXTI4);
663 declare!(DMA1_STREAM0);
664 declare!(DMA1_STREAM1);
665 declare!(DMA1_STREAM2);
666 declare!(DMA1_STREAM3);
667 declare!(DMA1_STREAM4);
668 declare!(DMA1_STREAM5);
669 declare!(DMA1_STREAM6);
670 declare!(ADC);
671 declare!(CAN1_TX);
672 declare!(CAN1_RX0);
673 declare!(CAN1_RX1);
674 declare!(CAN1_SCE);
675 declare!(EXTI9_5);
676 declare!(TIM1_BRK_TIM9);
677 declare!(TIM1_UP_TIM10);
678 declare!(TIM1_TRG_COM_TIM11);
679 declare!(TIM1_CC);
680 declare!(TIM2);
681 declare!(TIM3);
682 declare!(TIM4);
683 declare!(I2C1_EV);
684 declare!(I2C1_ER);
685 declare!(I2C2_EV);
686 declare!(I2C2_ER);
687 declare!(SPI1);
688 declare!(SPI2);
689 declare!(USART1);
690 declare!(USART2);
691 declare!(USART3);
692 declare!(EXTI15_10);
693 declare!(RTC_ALARM);
694 declare!(OTG_FS_WKUP);
695 declare!(TIM8_BRK_TIM12);
696 declare!(TIM8_UP_TIM13);
697 declare!(TIM8_TRG_COM_TIM14);
698 declare!(TIM8_CC);
699 declare!(DMA1_STREAM7);
700 declare!(FMC);
701 declare!(SDIO);
702 declare!(TIM5);
703 declare!(SPI3);
704 declare!(UART4);
705 declare!(UART5);
706 declare!(TIM6_DAC);
707 declare!(TIM7);
708 declare!(DMA2_STREAM0);
709 declare!(DMA2_STREAM1);
710 declare!(DMA2_STREAM2);
711 declare!(DMA2_STREAM3);
712 declare!(DMA2_STREAM4);
713 declare!(ETH);
714 declare!(ETH_WKUP);
715 declare!(CAN2_TX);
716 declare!(CAN2_RX0);
717 declare!(CAN2_RX1);
718 declare!(CAN2_SCE);
719 declare!(OTG_FS);
720 declare!(DMA2_STREAM5);
721 declare!(DMA2_STREAM6);
722 declare!(DMA2_STREAM7);
723 declare!(USART6);
724 declare!(I2C3_EV);
725 declare!(I2C3_ER);
726 declare!(OTG_HS_EP1_OUT);
727 declare!(OTG_HS_EP1_IN);
728 declare!(OTG_HS_WKUP);
729 declare!(OTG_HS);
730 declare!(DCMI);
731 declare!(CRYP);
732 declare!(HASH_RNG);
733 declare!(FPU);
734 declare!(UART7);
735 declare!(UART8);
736 declare!(SPI4);
737 declare!(SPI5);
738 declare!(SPI6);
739 declare!(LCD_TFT);
740 declare!(LCD_TFT_1);
741}
742
743#[cfg(feature = "stm32f429")]
744mod irqs {
745 use super::*;
746
747 declare!(WWDG);
748 declare!(PVD);
749 declare!(TAMP_STAMP);
750 declare!(RTC_WKUP);
751 declare!(FLASH);
752 declare!(RCC);
753 declare!(EXTI0);
754 declare!(EXTI1);
755 declare!(EXTI2);
756 declare!(EXTI3);
757 declare!(EXTI4);
758 declare!(DMA1_STREAM0);
759 declare!(DMA1_STREAM1);
760 declare!(DMA1_STREAM2);
761 declare!(DMA1_STREAM3);
762 declare!(DMA1_STREAM4);
763 declare!(DMA1_STREAM5);
764 declare!(DMA1_STREAM6);
765 declare!(ADC);
766 declare!(CAN1_TX);
767 declare!(CAN1_RX0);
768 declare!(CAN1_RX1);
769 declare!(CAN1_SCE);
770 declare!(EXTI9_5);
771 declare!(TIM1_BRK_TIM9);
772 declare!(TIM1_UP_TIM10);
773 declare!(TIM1_TRG_COM_TIM11);
774 declare!(TIM1_CC);
775 declare!(TIM2);
776 declare!(TIM3);
777 declare!(TIM4);
778 declare!(I2C1_EV);
779 declare!(I2C1_ER);
780 declare!(I2C2_EV);
781 declare!(I2C2_ER);
782 declare!(SPI1);
783 declare!(SPI2);
784 declare!(USART1);
785 declare!(USART2);
786 declare!(USART3);
787 declare!(EXTI15_10);
788 declare!(RTC_ALARM);
789 declare!(OTG_FS_WKUP);
790 declare!(TIM8_BRK_TIM12);
791 declare!(TIM8_UP_TIM13);
792 declare!(TIM8_TRG_COM_TIM14);
793 declare!(TIM8_CC);
794 declare!(DMA1_STREAM7);
795 declare!(FMC);
796 declare!(SDIO);
797 declare!(TIM5);
798 declare!(SPI3);
799 declare!(UART4);
800 declare!(UART5);
801 declare!(TIM6_DAC);
802 declare!(TIM7);
803 declare!(DMA2_STREAM0);
804 declare!(DMA2_STREAM1);
805 declare!(DMA2_STREAM2);
806 declare!(DMA2_STREAM3);
807 declare!(DMA2_STREAM4);
808 declare!(ETH);
809 declare!(ETH_WKUP);
810 declare!(CAN2_TX);
811 declare!(CAN2_RX0);
812 declare!(CAN2_RX1);
813 declare!(CAN2_SCE);
814 declare!(OTG_FS);
815 declare!(DMA2_STREAM5);
816 declare!(DMA2_STREAM6);
817 declare!(DMA2_STREAM7);
818 declare!(USART6);
819 declare!(I2C3_EV);
820 declare!(I2C3_ER);
821 declare!(OTG_HS_EP1_OUT);
822 declare!(OTG_HS_EP1_IN);
823 declare!(OTG_HS_WKUP);
824 declare!(OTG_HS);
825 declare!(DCMI);
826 declare!(CRYP);
827 declare!(HASH_RNG);
828 declare!(FPU);
829 declare!(UART7);
830 declare!(UART8);
831 declare!(SPI4);
832 declare!(SPI5);
833 declare!(SPI6);
834 declare!(SAI1);
835 declare!(LCD_TFT);
836 declare!(LCD_TFT_1);
837 declare!(DMA2D);
838}
839
840#[cfg(feature = "stm32f446")]
841mod irqs {
842 use super::*;
843
844 declare!(WWDG);
845 declare!(TAMP_STAMP);
846 declare!(RTC_WKUP);
847 declare!(FLASH);
848 declare!(RCC);
849 declare!(EXTI0);
850 declare!(EXTI1);
851 declare!(EXTI2);
852 declare!(EXTI3);
853 declare!(EXTI4);
854 declare!(DMA1_STREAM0);
855 declare!(DMA1_STREAM1);
856 declare!(DMA1_STREAM2);
857 declare!(DMA1_STREAM3);
858 declare!(DMA1_STREAM4);
859 declare!(DMA1_STREAM5);
860 declare!(DMA1_STREAM6);
861 declare!(ADC);
862 declare!(CAN1_TX);
863 declare!(CAN1_RX0);
864 declare!(CAN1_RX1);
865 declare!(CAN1_SCE);
866 declare!(EXTI9_5);
867 declare!(TIM1_BRK_TIM9);
868 declare!(TIM1_UP_TIM10);
869 declare!(TIM1_TRG_COM_TIM11);
870 declare!(TIM1_CC);
871 declare!(TIM2);
872 declare!(TIM3);
873 declare!(TIM4);
874 declare!(I2C1_EV);
875 declare!(I2C1_ER);
876 declare!(I2C2_EV);
877 declare!(I2C2_ER);
878 declare!(SPI1);
879 declare!(SPI2);
880 declare!(USART1);
881 declare!(USART2);
882 declare!(USART3);
883 declare!(EXTI15_10);
884 declare!(RTC_ALARM);
885 declare!(OTG_FS_WKUP);
886 declare!(TIM8_BRK_TIM12);
887 declare!(TIM8_UP_TIM13);
888 declare!(TIM8_TRG_COM_TIM14);
889 declare!(TIM8_CC);
890 declare!(DMA1_STREAM7);
891 declare!(FMC);
892 declare!(SDIO);
893 declare!(TIM5);
894 declare!(SPI3);
895 declare!(UART4);
896 declare!(UART5);
897 declare!(TIM6_DAC);
898 declare!(TIM7);
899 declare!(DMA2_STREAM0);
900 declare!(DMA2_STREAM1);
901 declare!(DMA2_STREAM2);
902 declare!(DMA2_STREAM3);
903 declare!(DMA2_STREAM4);
904 declare!(ETH);
905 declare!(ETH_WKUP);
906 declare!(CAN2_TX);
907 declare!(CAN2_RX0);
908 declare!(CAN2_RX1);
909 declare!(CAN2_SCE);
910 declare!(OTG_FS);
911 declare!(DMA2_STREAM5);
912 declare!(DMA2_STREAM6);
913 declare!(DMA2_STREAM7);
914 declare!(USART6);
915 declare!(I2C3_EV);
916 declare!(I2C3_ER);
917 declare!(DCMI);
918 declare!(FPU);
919 declare!(UART7);
920 declare!(UART8);
921 declare!(SPI4);
922 declare!(LCD_TFT);
923 declare!(LCD_TFT_1);
924}
925
926#[cfg(feature = "stm32f469")]
927mod irqs {
928 use super::*;
929
930 declare!(WWDG);
931 declare!(PVD);
932 declare!(TAMP_STAMP);
933 declare!(RTC_WKUP);
934 declare!(FLASH);
935 declare!(RCC);
936 declare!(EXTI0);
937 declare!(EXTI1);
938 declare!(EXTI2);
939 declare!(EXTI3);
940 declare!(EXTI4);
941 declare!(DMA1_STREAM0);
942 declare!(DMA1_STREAM1);
943 declare!(DMA1_STREAM2);
944 declare!(DMA1_STREAM3);
945 declare!(DMA1_STREAM4);
946 declare!(DMA1_STREAM5);
947 declare!(DMA1_STREAM6);
948 declare!(ADC);
949 declare!(CAN1_TX);
950 declare!(CAN1_RX0);
951 declare!(CAN1_RX1);
952 declare!(CAN1_SCE);
953 declare!(EXTI9_5);
954 declare!(TIM1_BRK_TIM9);
955 declare!(TIM1_UP_TIM10);
956 declare!(TIM1_TRG_COM_TIM11);
957 declare!(TIM1_CC);
958 declare!(TIM2);
959 declare!(TIM3);
960 declare!(TIM4);
961 declare!(I2C1_EV);
962 declare!(I2C1_ER);
963 declare!(I2C2_EV);
964 declare!(I2C2_ER);
965 declare!(SPI1);
966 declare!(SPI2);
967 declare!(USART1);
968 declare!(USART2);
969 declare!(USART3);
970 declare!(EXTI15_10);
971 declare!(RTC_ALARM);
972 declare!(OTG_FS_WKUP);
973 declare!(TIM8_BRK_TIM12);
974 declare!(TIM8_UP_TIM13);
975 declare!(TIM8_TRG_COM_TIM14);
976 declare!(TIM8_CC);
977 declare!(DMA1_STREAM7);
978 declare!(FMC);
979 declare!(SDIO);
980 declare!(TIM5);
981 declare!(SPI3);
982 declare!(UART4);
983 declare!(UART5);
984 declare!(TIM6_DAC);
985 declare!(TIM7);
986 declare!(DMA2_STREAM0);
987 declare!(DMA2_STREAM1);
988 declare!(DMA2_STREAM2);
989 declare!(DMA2_STREAM3);
990 declare!(DMA2_STREAM4);
991 declare!(ETH);
992 declare!(ETH_WKUP);
993 declare!(CAN2_TX);
994 declare!(CAN2_RX0);
995 declare!(CAN2_RX1);
996 declare!(CAN2_SCE);
997 declare!(OTG_FS);
998 declare!(DMA2_STREAM5);
999 declare!(DMA2_STREAM6);
1000 declare!(DMA2_STREAM7);
1001 declare!(USART6);
1002 declare!(I2C3_EV);
1003 declare!(I2C3_ER);
1004 declare!(OTG_HS_EP1_OUT);
1005 declare!(OTG_HS_EP1_IN);
1006 declare!(OTG_HS_WKUP);
1007 declare!(OTG_HS);
1008 declare!(DCMI);
1009 declare!(CRYP);
1010 declare!(HASH_RNG);
1011 declare!(FPU);
1012 declare!(UART7);
1013 declare!(UART8);
1014 declare!(SPI4);
1015 declare!(SPI5);
1016 declare!(SPI6);
1017 declare!(SAI1);
1018 declare!(LCD_TFT);
1019 declare!(LCD_TFT_1);
1020 declare!(DMA2D);
1021 declare!(QUADSPI);
1022 declare!(DSIHOST);
1023}
1024
1025#[cfg(feature = "stm32l0x1")]
1026mod irqs {
1027 use super::*;
1028 declare!(WWDG);
1029 declare!(PVD);
1030 declare!(RTC);
1031 declare!(FLASH);
1032 declare!(RCC);
1033 declare!(EXTI0_1);
1034 declare!(EXTI2_3);
1035 declare!(EXTI4_15);
1036 declare!(DMA1_CHANNEL1);
1037 declare!(DMA1_CHANNEL2_3);
1038 declare!(DMA1_CHANNEL4_7);
1039 declare!(ADC_COMP);
1040 declare!(LPTIM1);
1041 declare!(USART4_USART5);
1042 declare!(TIM2);
1043 declare!(TIM3);
1044 declare!(TIM6);
1045 declare!(TIM7);
1046 declare!(TIM21);
1047 declare!(I2C3);
1048 declare!(TIM22);
1049 declare!(I2C1);
1050 declare!(I2C2);
1051 declare!(SPI1);
1052 declare!(SPI2);
1053 declare!(USART1);
1054 declare!(USART2);
1055 declare!(AES_RNG_LPUART1);
1056}
1057
1058#[cfg(feature = "stm32l0x2")]
1059mod irqs {
1060 use super::*;
1061 declare!(WWDG);
1062 declare!(PVD);
1063 declare!(RTC);
1064 declare!(RCC);
1065 declare!(EXTI0_1);
1066 declare!(EXTI2_3);
1067 declare!(EXTI4_15);
1068 declare!(TSC);
1069 declare!(DMA1_CHANNEL1);
1070 declare!(DMA1_CHANNEL2_3);
1071 declare!(DMA1_CHANNEL4_7);
1072 declare!(ADC_COMP);
1073 declare!(LPTIM1);
1074 declare!(USART4_USART5);
1075 declare!(TIM2);
1076 declare!(TIM3);
1077 declare!(TIM6_DAC);
1078 declare!(TIM7);
1079 declare!(TIM21);
1080 declare!(I2C3);
1081 declare!(TIM22);
1082 declare!(I2C1);
1083 declare!(I2C2);
1084 declare!(SPI1);
1085 declare!(SPI2);
1086 declare!(USART1);
1087 declare!(USART2);
1088 declare!(AES_RNG_LPUART1);
1089 declare!(USB);
1090}
1091
1092#[cfg(feature = "stm32l0x3")]
1093mod irqs {
1094 use super::*;
1095 declare!(WWDG);
1096 declare!(PVD);
1097 declare!(RTC);
1098 declare!(RCC);
1099 declare!(EXTI0_1);
1100 declare!(EXTI2_3);
1101 declare!(EXTI4_15);
1102 declare!(TSC);
1103 declare!(DMA1_CHANNEL1);
1104 declare!(DMA1_CHANNEL2_3);
1105 declare!(DMA1_CHANNEL4_7);
1106 declare!(ADC_COMP);
1107 declare!(LPTIM1);
1108 declare!(USART4_USART5);
1109 declare!(TIM2);
1110 declare!(TIM3);
1111 declare!(TIM6_DAC);
1112 declare!(TIM7);
1113 declare!(TIM21);
1114 declare!(I2C3);
1115 declare!(TIM22);
1116 declare!(I2C1);
1117 declare!(I2C2);
1118 declare!(SPI1);
1119 declare!(SPI2);
1120 declare!(USART1);
1121 declare!(USART2);
1122 declare!(AES_RNG_LPUART1);
1123 declare!(LCD);
1124 declare!(USB);
1125}
1126
1127pub use irqs::*;
diff --git a/embassy-stm32/src/lib.rs b/embassy-stm32/src/lib.rs
new file mode 100644
index 000000000..a1f40b2c7
--- /dev/null
+++ b/embassy-stm32/src/lib.rs
@@ -0,0 +1,35 @@
1#![no_std]
2#![feature(generic_associated_types)]
3#![feature(asm)]
4#![feature(min_type_alias_impl_trait)]
5#![feature(impl_trait_in_bindings)]
6#![feature(type_alias_impl_trait)]
7#![allow(incomplete_features)]
8
9#[cfg(any(
10 feature = "stm32f401",
11 feature = "stm32f405",
12 feature = "stm32f407",
13 feature = "stm32f410",
14 feature = "stm32f411",
15 feature = "stm32f412",
16 feature = "stm32f413",
17 feature = "stm32f415",
18 feature = "stm32f417",
19 feature = "stm32f423",
20 feature = "stm32f427",
21 feature = "stm32f429",
22 feature = "stm32f437",
23 feature = "stm32f439",
24 feature = "stm32f446",
25 feature = "stm32f469",
26 feature = "stm32f479",
27))]
28pub use {stm32f4xx_hal as hal, stm32f4xx_hal::stm32 as pac};
29
30#[cfg(any(feature = "stm32l0x1", feature = "stm32l0x2", feature = "stm32l0x3",))]
31pub use {stm32l0xx_hal as hal, stm32l0xx_hal::pac};
32
33pub mod fmt;
34
35pub mod interrupt;