aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRasmus Melchior Jacobsen <[email protected]>2023-05-25 13:42:42 +0200
committerRasmus Melchior Jacobsen <[email protected]>2023-05-25 20:07:42 +0200
commit7371eefa8666c304fce5c0e25f5315b1f10161fa (patch)
tree5f497dd02f3c08e7a383c43eefeb9763f59705d5
parent15636f05f54458a184f0e117b1cfdb9d8e929f1d (diff)
Align with new bind_interrupt
-rw-r--r--embassy-stm32/src/flash/asynch.rs3
-rw-r--r--embassy-stm32/src/flash/common.rs41
-rw-r--r--embassy-stm32/src/flash/f0.rs2
-rw-r--r--embassy-stm32/src/flash/f3.rs2
-rw-r--r--embassy-stm32/src/flash/f4.rs2
-rw-r--r--embassy-stm32/src/flash/f7.rs2
-rw-r--r--embassy-stm32/src/flash/h7.rs2
-rw-r--r--embassy-stm32/src/flash/l.rs2
-rw-r--r--embassy-stm32/src/flash/other.rs2
-rw-r--r--examples/boot/application/rp/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32f3/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32f7/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32h7/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32l0/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32l1/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32l4/src/bin/a.rs2
-rw-r--r--examples/boot/application/stm32wl/src/bin/a.rs2
-rw-r--r--examples/boot/bootloader/stm32/src/main.rs3
-rw-r--r--examples/stm32f3/src/bin/flash.rs4
-rw-r--r--examples/stm32f4/src/bin/flash.rs4
-rw-r--r--examples/stm32f4/src/bin/flash_async.rs10
-rw-r--r--examples/stm32h7/src/bin/flash.rs4
-rw-r--r--examples/stm32l0/src/bin/flash.rs4
-rw-r--r--examples/stm32l1/src/bin/flash.rs4
-rw-r--r--examples/stm32wl/src/bin/flash.rs4
25 files changed, 71 insertions, 40 deletions
diff --git a/embassy-stm32/src/flash/asynch.rs b/embassy-stm32/src/flash/asynch.rs
index 3564bbff5..017fb17fa 100644
--- a/embassy-stm32/src/flash/asynch.rs
+++ b/embassy-stm32/src/flash/asynch.rs
@@ -12,15 +12,18 @@ pub(super) static REGION_ACCESS: Mutex<CriticalSectionRawMutex, ()> = Mutex::new
12 12
13impl<'d> Flash<'d> { 13impl<'d> Flash<'d> {
14 pub fn into_regions(self) -> FlashLayout<'d, Async> { 14 pub fn into_regions(self) -> FlashLayout<'d, Async> {
15 assert!(!self.blocking_only);
15 family::set_default_layout(); 16 family::set_default_layout();
16 FlashLayout::new(self.inner) 17 FlashLayout::new(self.inner)
17 } 18 }
18 19
19 pub async fn write(&mut self, offset: u32, bytes: &[u8]) -> Result<(), Error> { 20 pub async fn write(&mut self, offset: u32, bytes: &[u8]) -> Result<(), Error> {
21 assert!(!self.blocking_only);
20 unsafe { write_chunked(FLASH_BASE as u32, FLASH_SIZE as u32, offset, bytes).await } 22 unsafe { write_chunked(FLASH_BASE as u32, FLASH_SIZE as u32, offset, bytes).await }
21 } 23 }
22 24
23 pub async fn erase(&mut self, from: u32, to: u32) -> Result<(), Error> { 25 pub async fn erase(&mut self, from: u32, to: u32) -> Result<(), Error> {
26 assert!(!self.blocking_only);
24 unsafe { erase_sectored(FLASH_BASE as u32, from, to).await } 27 unsafe { erase_sectored(FLASH_BASE as u32, from, to).await }
25 } 28 }
26} 29}
diff --git a/embassy-stm32/src/flash/common.rs b/embassy-stm32/src/flash/common.rs
index 8b38745cf..0a1ee5166 100644
--- a/embassy-stm32/src/flash/common.rs
+++ b/embassy-stm32/src/flash/common.rs
@@ -1,5 +1,5 @@
1use atomic_polyfill::{fence, Ordering}; 1use atomic_polyfill::{fence, Ordering};
2use embassy_cortex_m::interrupt::InterruptExt; 2use embassy_cortex_m::interrupt::{Interrupt, InterruptExt};
3use embassy_hal_common::drop::OnDrop; 3use embassy_hal_common::drop::OnDrop;
4use embassy_hal_common::{into_ref, PeripheralRef}; 4use embassy_hal_common::{into_ref, PeripheralRef};
5use stm32_metapac::FLASH_BASE; 5use stm32_metapac::FLASH_BASE;
@@ -9,21 +9,37 @@ use super::{
9 WRITE_SIZE, 9 WRITE_SIZE,
10}; 10};
11use crate::peripherals::FLASH; 11use crate::peripherals::FLASH;
12use crate::Peripheral; 12use crate::{interrupt, Peripheral};
13 13
14pub struct Flash<'d> { 14pub struct Flash<'d> {
15 pub(crate) inner: PeripheralRef<'d, FLASH>, 15 pub(crate) inner: PeripheralRef<'d, FLASH>,
16 pub(crate) blocking_only: bool,
16} 17}
17 18
18impl<'d> Flash<'d> { 19impl<'d> Flash<'d> {
19 pub fn new(p: impl Peripheral<P = FLASH> + 'd, irq: impl Peripheral<P = crate::interrupt::FLASH> + 'd) -> Self { 20 pub fn new(
20 into_ref!(p, irq); 21 p: impl Peripheral<P = FLASH> + 'd,
22 _irq: impl interrupt::Binding<crate::interrupt::FLASH, InterruptHandler> + 'd,
23 ) -> Self {
24 into_ref!(p);
25
26 let flash_irq = unsafe { crate::interrupt::FLASH::steal() };
27 flash_irq.unpend();
28 flash_irq.enable();
29
30 Self {
31 inner: p,
32 blocking_only: false,
33 }
34 }
21 35
22 irq.set_handler(family::on_interrupt); 36 pub fn new_blocking_only(p: impl Peripheral<P = FLASH> + 'd) -> Self {
23 irq.unpend(); 37 into_ref!(p);
24 irq.enable();
25 38
26 Self { inner: p } 39 Self {
40 inner: p,
41 blocking_only: true,
42 }
27 } 43 }
28 44
29 pub fn into_blocking_regions(self) -> FlashLayout<'d, Blocking> { 45 pub fn into_blocking_regions(self) -> FlashLayout<'d, Blocking> {
@@ -52,6 +68,15 @@ impl<'d> Flash<'d> {
52 } 68 }
53} 69}
54 70
71/// Interrupt handler
72pub struct InterruptHandler;
73
74impl interrupt::Handler<crate::interrupt::FLASH> for InterruptHandler {
75 unsafe fn on_interrupt() {
76 family::on_interrupt();
77 }
78}
79
55pub(super) fn read_blocking(base: u32, size: u32, offset: u32, bytes: &mut [u8]) -> Result<(), Error> { 80pub(super) fn read_blocking(base: u32, size: u32, offset: u32, bytes: &mut [u8]) -> Result<(), Error> {
56 if offset + bytes.len() as u32 > size { 81 if offset + bytes.len() as u32 > size {
57 return Err(Error::Size); 82 return Err(Error::Size);
diff --git a/embassy-stm32/src/flash/f0.rs b/embassy-stm32/src/flash/f0.rs
index ecf3a6981..cd17486e6 100644
--- a/embassy-stm32/src/flash/f0.rs
+++ b/embassy-stm32/src/flash/f0.rs
@@ -13,7 +13,7 @@ pub const fn get_flash_regions() -> &'static [&'static FlashRegion] {
13 &FLASH_REGIONS 13 &FLASH_REGIONS
14} 14}
15 15
16pub(crate) unsafe fn on_interrupt(_: *mut ()) { 16pub(crate) unsafe fn on_interrupt() {
17 unimplemented!(); 17 unimplemented!();
18} 18}
19 19
diff --git a/embassy-stm32/src/flash/f3.rs b/embassy-stm32/src/flash/f3.rs
index fd778f2b1..4ce391288 100644
--- a/embassy-stm32/src/flash/f3.rs
+++ b/embassy-stm32/src/flash/f3.rs
@@ -13,7 +13,7 @@ pub const fn get_flash_regions() -> &'static [&'static FlashRegion] {
13 &FLASH_REGIONS 13 &FLASH_REGIONS
14} 14}
15 15
16pub(crate) unsafe fn on_interrupt(_: *mut ()) { 16pub(crate) unsafe fn on_interrupt() {
17 unimplemented!(); 17 unimplemented!();
18} 18}
19 19
diff --git a/embassy-stm32/src/flash/f4.rs b/embassy-stm32/src/flash/f4.rs
index 50ab446bd..2b0472640 100644
--- a/embassy-stm32/src/flash/f4.rs
+++ b/embassy-stm32/src/flash/f4.rs
@@ -210,7 +210,7 @@ pub const fn get_flash_regions() -> &'static [&'static FlashRegion] {
210 &FLASH_REGIONS 210 &FLASH_REGIONS
211} 211}
212 212
213pub(crate) unsafe fn on_interrupt(_: *mut ()) { 213pub(crate) unsafe fn on_interrupt() {
214 // Clear IRQ flags 214 // Clear IRQ flags
215 pac::FLASH.sr().write(|w| { 215 pac::FLASH.sr().write(|w| {
216 w.set_operr(true); 216 w.set_operr(true);
diff --git a/embassy-stm32/src/flash/f7.rs b/embassy-stm32/src/flash/f7.rs
index a0593b14b..ab518bf89 100644
--- a/embassy-stm32/src/flash/f7.rs
+++ b/embassy-stm32/src/flash/f7.rs
@@ -12,7 +12,7 @@ pub const fn get_flash_regions() -> &'static [&'static FlashRegion] {
12 &FLASH_REGIONS 12 &FLASH_REGIONS
13} 13}
14 14
15pub(crate) unsafe fn on_interrupt(_: *mut ()) { 15pub(crate) unsafe fn on_interrupt() {
16 unimplemented!(); 16 unimplemented!();
17} 17}
18 18
diff --git a/embassy-stm32/src/flash/h7.rs b/embassy-stm32/src/flash/h7.rs
index 865f13283..d6818d594 100644
--- a/embassy-stm32/src/flash/h7.rs
+++ b/embassy-stm32/src/flash/h7.rs
@@ -17,7 +17,7 @@ pub fn get_flash_regions() -> &'static [&'static FlashRegion] {
17 &FLASH_REGIONS 17 &FLASH_REGIONS
18} 18}
19 19
20pub(crate) unsafe fn on_interrupt(_: *mut ()) { 20pub(crate) unsafe fn on_interrupt() {
21 unimplemented!(); 21 unimplemented!();
22} 22}
23 23
diff --git a/embassy-stm32/src/flash/l.rs b/embassy-stm32/src/flash/l.rs
index f8a0dac4c..c2394e0c9 100644
--- a/embassy-stm32/src/flash/l.rs
+++ b/embassy-stm32/src/flash/l.rs
@@ -12,7 +12,7 @@ pub const fn get_flash_regions() -> &'static [&'static FlashRegion] {
12 &FLASH_REGIONS 12 &FLASH_REGIONS
13} 13}
14 14
15pub(crate) unsafe fn on_interrupt(_: *mut ()) { 15pub(crate) unsafe fn on_interrupt() {
16 unimplemented!(); 16 unimplemented!();
17} 17}
18 18
diff --git a/embassy-stm32/src/flash/other.rs b/embassy-stm32/src/flash/other.rs
index e21b0b241..e569951f9 100644
--- a/embassy-stm32/src/flash/other.rs
+++ b/embassy-stm32/src/flash/other.rs
@@ -8,7 +8,7 @@ pub const fn get_flash_regions() -> &'static [&'static FlashRegion] {
8 &FLASH_REGIONS 8 &FLASH_REGIONS
9} 9}
10 10
11pub(crate) unsafe fn on_interrupt(_: *mut ()) { 11pub(crate) unsafe fn on_interrupt() {
12 unimplemented!(); 12 unimplemented!();
13} 13}
14 14
diff --git a/examples/boot/application/rp/src/bin/a.rs b/examples/boot/application/rp/src/bin/a.rs
index e3ac634c2..2b84ec614 100644
--- a/examples/boot/application/rp/src/bin/a.rs
+++ b/examples/boot/application/rp/src/bin/a.rs
@@ -26,7 +26,7 @@ async fn main(_s: Spawner) {
26 let mut watchdog = Watchdog::new(p.WATCHDOG); 26 let mut watchdog = Watchdog::new(p.WATCHDOG);
27 watchdog.start(Duration::from_secs(8)); 27 watchdog.start(Duration::from_secs(8));
28 28
29 let mut flash: Flash<_, FLASH_SIZE> = Flash::new(p.FLASH); 29 let mut flash: Flash<_, FLASH_SIZE> = Flash::new_blocking_only(p.FLASH);
30 30
31 let mut updater = FirmwareUpdater::default(); 31 let mut updater = FirmwareUpdater::default();
32 32
diff --git a/examples/boot/application/stm32f3/src/bin/a.rs b/examples/boot/application/stm32f3/src/bin/a.rs
index d92d59b29..a69b6327f 100644
--- a/examples/boot/application/stm32f3/src/bin/a.rs
+++ b/examples/boot/application/stm32f3/src/bin/a.rs
@@ -17,7 +17,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin");
17#[embassy_executor::main] 17#[embassy_executor::main]
18async fn main(_spawner: Spawner) { 18async fn main(_spawner: Spawner) {
19 let p = embassy_stm32::init(Default::default()); 19 let p = embassy_stm32::init(Default::default());
20 let flash = Flash::new(p.FLASH); 20 let flash = Flash::new_blocking_only(p.FLASH);
21 let mut flash = BlockingAsync::new(flash); 21 let mut flash = BlockingAsync::new(flash);
22 22
23 let button = Input::new(p.PC13, Pull::Up); 23 let button = Input::new(p.PC13, Pull::Up);
diff --git a/examples/boot/application/stm32f7/src/bin/a.rs b/examples/boot/application/stm32f7/src/bin/a.rs
index 79ab80e09..1f55db932 100644
--- a/examples/boot/application/stm32f7/src/bin/a.rs
+++ b/examples/boot/application/stm32f7/src/bin/a.rs
@@ -16,7 +16,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin");
16#[embassy_executor::main] 16#[embassy_executor::main]
17async fn main(_spawner: Spawner) { 17async fn main(_spawner: Spawner) {
18 let p = embassy_stm32::init(Default::default()); 18 let p = embassy_stm32::init(Default::default());
19 let mut flash = Flash::new(p.FLASH); 19 let mut flash = Flash::new_blocking_only(p.FLASH);
20 20
21 let button = Input::new(p.PC13, Pull::Down); 21 let button = Input::new(p.PC13, Pull::Down);
22 let mut button = ExtiInput::new(button, p.EXTI13); 22 let mut button = ExtiInput::new(button, p.EXTI13);
diff --git a/examples/boot/application/stm32h7/src/bin/a.rs b/examples/boot/application/stm32h7/src/bin/a.rs
index 8b452be34..b8617c3bd 100644
--- a/examples/boot/application/stm32h7/src/bin/a.rs
+++ b/examples/boot/application/stm32h7/src/bin/a.rs
@@ -16,7 +16,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin");
16#[embassy_executor::main] 16#[embassy_executor::main]
17async fn main(_spawner: Spawner) { 17async fn main(_spawner: Spawner) {
18 let p = embassy_stm32::init(Default::default()); 18 let p = embassy_stm32::init(Default::default());
19 let mut flash = Flash::new(p.FLASH); 19 let mut flash = Flash::new_blocking_only(p.FLASH);
20 20
21 let button = Input::new(p.PC13, Pull::Down); 21 let button = Input::new(p.PC13, Pull::Down);
22 let mut button = ExtiInput::new(button, p.EXTI13); 22 let mut button = ExtiInput::new(button, p.EXTI13);
diff --git a/examples/boot/application/stm32l0/src/bin/a.rs b/examples/boot/application/stm32l0/src/bin/a.rs
index 59ca34386..c66635639 100644
--- a/examples/boot/application/stm32l0/src/bin/a.rs
+++ b/examples/boot/application/stm32l0/src/bin/a.rs
@@ -18,7 +18,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin");
18#[embassy_executor::main] 18#[embassy_executor::main]
19async fn main(_spawner: Spawner) { 19async fn main(_spawner: Spawner) {
20 let p = embassy_stm32::init(Default::default()); 20 let p = embassy_stm32::init(Default::default());
21 let flash = Flash::new(p.FLASH); 21 let flash = Flash::new_blocking_only(p.FLASH);
22 let mut flash = BlockingAsync::new(flash); 22 let mut flash = BlockingAsync::new(flash);
23 23
24 let button = Input::new(p.PB2, Pull::Up); 24 let button = Input::new(p.PB2, Pull::Up);
diff --git a/examples/boot/application/stm32l1/src/bin/a.rs b/examples/boot/application/stm32l1/src/bin/a.rs
index 59ca34386..c66635639 100644
--- a/examples/boot/application/stm32l1/src/bin/a.rs
+++ b/examples/boot/application/stm32l1/src/bin/a.rs
@@ -18,7 +18,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin");
18#[embassy_executor::main] 18#[embassy_executor::main]
19async fn main(_spawner: Spawner) { 19async fn main(_spawner: Spawner) {
20 let p = embassy_stm32::init(Default::default()); 20 let p = embassy_stm32::init(Default::default());
21 let flash = Flash::new(p.FLASH); 21 let flash = Flash::new_blocking_only(p.FLASH);
22 let mut flash = BlockingAsync::new(flash); 22 let mut flash = BlockingAsync::new(flash);
23 23
24 let button = Input::new(p.PB2, Pull::Up); 24 let button = Input::new(p.PB2, Pull::Up);
diff --git a/examples/boot/application/stm32l4/src/bin/a.rs b/examples/boot/application/stm32l4/src/bin/a.rs
index 6cddc6cc8..86936222c 100644
--- a/examples/boot/application/stm32l4/src/bin/a.rs
+++ b/examples/boot/application/stm32l4/src/bin/a.rs
@@ -17,7 +17,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin");
17#[embassy_executor::main] 17#[embassy_executor::main]
18async fn main(_spawner: Spawner) { 18async fn main(_spawner: Spawner) {
19 let p = embassy_stm32::init(Default::default()); 19 let p = embassy_stm32::init(Default::default());
20 let flash = Flash::new(p.FLASH); 20 let flash = Flash::new_blocking_only(p.FLASH);
21 let mut flash = BlockingAsync::new(flash); 21 let mut flash = BlockingAsync::new(flash);
22 22
23 let button = Input::new(p.PC13, Pull::Up); 23 let button = Input::new(p.PC13, Pull::Up);
diff --git a/examples/boot/application/stm32wl/src/bin/a.rs b/examples/boot/application/stm32wl/src/bin/a.rs
index 1ff47eddd..2982e8df1 100644
--- a/examples/boot/application/stm32wl/src/bin/a.rs
+++ b/examples/boot/application/stm32wl/src/bin/a.rs
@@ -17,7 +17,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin");
17#[embassy_executor::main] 17#[embassy_executor::main]
18async fn main(_spawner: Spawner) { 18async fn main(_spawner: Spawner) {
19 let p = embassy_stm32::init(Default::default()); 19 let p = embassy_stm32::init(Default::default());
20 let flash = Flash::new(p.FLASH); 20 let flash = Flash::new_blocking_only(p.FLASH);
21 let mut flash = BlockingAsync::new(flash); 21 let mut flash = BlockingAsync::new(flash);
22 22
23 let button = Input::new(p.PA0, Pull::Up); 23 let button = Input::new(p.PA0, Pull::Up);
diff --git a/examples/boot/bootloader/stm32/src/main.rs b/examples/boot/bootloader/stm32/src/main.rs
index 49c21920b..5e8a4f2b3 100644
--- a/examples/boot/bootloader/stm32/src/main.rs
+++ b/examples/boot/bootloader/stm32/src/main.rs
@@ -20,8 +20,7 @@ fn main() -> ! {
20 */ 20 */
21 21
22 let mut bl: BootLoader<2048> = BootLoader::default(); 22 let mut bl: BootLoader<2048> = BootLoader::default();
23 let flash = Flash::new(p.FLASH); 23 let layout = Flash::new_blocking_only(p.FLASH).into_blocking_regions();
24 let layout = flash.into_regions();
25 let mut flash = BootFlash::new(layout.bank1_region); 24 let mut flash = BootFlash::new(layout.bank1_region);
26 let start = bl.prepare(&mut SingleFlashConfig::new(&mut flash)); 25 let start = bl.prepare(&mut SingleFlashConfig::new(&mut flash));
27 core::mem::drop(flash); 26 core::mem::drop(flash);
diff --git a/examples/stm32f3/src/bin/flash.rs b/examples/stm32f3/src/bin/flash.rs
index befae0a16..9a31b548d 100644
--- a/examples/stm32f3/src/bin/flash.rs
+++ b/examples/stm32f3/src/bin/flash.rs
@@ -4,7 +4,7 @@
4 4
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::{flash::Flash, interrupt}; 7use embassy_stm32::flash::Flash;
8use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
9 9
10#[embassy_executor::main] 10#[embassy_executor::main]
@@ -14,7 +14,7 @@ async fn main(_spawner: Spawner) {
14 14
15 const ADDR: u32 = 0x26000; 15 const ADDR: u32 = 0x26000;
16 16
17 let mut f = Flash::new(p.FLASH, interrupt::take!(FLASH)).into_blocking_regions().bank1_region; 17 let mut f = Flash::new_blocking_only(p.FLASH).into_blocking_regions().bank1_region;
18 18
19 info!("Reading..."); 19 info!("Reading...");
20 let mut buf = [0u8; 8]; 20 let mut buf = [0u8; 8];
diff --git a/examples/stm32f4/src/bin/flash.rs b/examples/stm32f4/src/bin/flash.rs
index de4ecdb8f..455af930b 100644
--- a/examples/stm32f4/src/bin/flash.rs
+++ b/examples/stm32f4/src/bin/flash.rs
@@ -4,7 +4,7 @@
4 4
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::{flash::Flash, interrupt}; 7use embassy_stm32::flash::Flash;
8use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
9 9
10#[embassy_executor::main] 10#[embassy_executor::main]
@@ -14,7 +14,7 @@ async fn main(_spawner: Spawner) {
14 14
15 // Once can also call `into_regions()` to get access to NorFlash implementations 15 // Once can also call `into_regions()` to get access to NorFlash implementations
16 // for each of the unique characteristics. 16 // for each of the unique characteristics.
17 let mut f = Flash::new(p.FLASH, interrupt::take!(FLASH)); 17 let mut f = Flash::new_blocking_only(p.FLASH);
18 18
19 // Sector 5 19 // Sector 5
20 test_flash(&mut f, 128 * 1024, 128 * 1024); 20 test_flash(&mut f, 128 * 1024, 128 * 1024);
diff --git a/examples/stm32f4/src/bin/flash_async.rs b/examples/stm32f4/src/bin/flash_async.rs
index c9d9df34b..675337083 100644
--- a/examples/stm32f4/src/bin/flash_async.rs
+++ b/examples/stm32f4/src/bin/flash_async.rs
@@ -5,17 +5,21 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_time::{Timer, Duration}; 7use embassy_time::{Timer, Duration};
8use embassy_stm32::flash::Flash; 8use embassy_stm32::flash::{Flash, InterruptHandler};
9use embassy_stm32::gpio::{AnyPin, Level, Output, Pin, Speed}; 9use embassy_stm32::gpio::{AnyPin, Level, Output, Pin, Speed};
10use embassy_stm32::{interrupt}; 10use embassy_stm32::bind_interrupts;
11use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
12 12
13bind_interrupts!(struct Irqs {
14 FLASH => InterruptHandler;
15});
16
13#[embassy_executor::main] 17#[embassy_executor::main]
14async fn main(spawner: Spawner) { 18async fn main(spawner: Spawner) {
15 let p = embassy_stm32::init(Default::default()); 19 let p = embassy_stm32::init(Default::default());
16 info!("Hello Flash!"); 20 info!("Hello Flash!");
17 21
18 let mut f = Flash::new(p.FLASH, interrupt::take!(FLASH)); 22 let mut f = Flash::new(p.FLASH, Irqs);
19 23
20 // Led should blink uninterrupted during ~2sec erase operation 24 // Led should blink uninterrupted during ~2sec erase operation
21 spawner.spawn(blinky(p.PB7.degrade())).unwrap(); 25 spawner.spawn(blinky(p.PB7.degrade())).unwrap();
diff --git a/examples/stm32h7/src/bin/flash.rs b/examples/stm32h7/src/bin/flash.rs
index fe6dad249..c0c332c34 100644
--- a/examples/stm32h7/src/bin/flash.rs
+++ b/examples/stm32h7/src/bin/flash.rs
@@ -4,7 +4,7 @@
4 4
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::{flash::Flash, interrupt}; 7use embassy_stm32::flash::Flash;
8use embassy_time::{Duration, Timer}; 8use embassy_time::{Duration, Timer};
9use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
10 10
@@ -18,7 +18,7 @@ async fn main(_spawner: Spawner) {
18 // wait a bit before accessing the flash 18 // wait a bit before accessing the flash
19 Timer::after(Duration::from_millis(300)).await; 19 Timer::after(Duration::from_millis(300)).await;
20 20
21 let mut f = Flash::new(p.FLASH, interrupt::take!(FLASH)).into_blocking_regions().bank2_region; 21 let mut f = Flash::new_blocking_only(p.FLASH).into_blocking_regions().bank2_region;
22 22
23 info!("Reading..."); 23 info!("Reading...");
24 let mut buf = [0u8; 32]; 24 let mut buf = [0u8; 32];
diff --git a/examples/stm32l0/src/bin/flash.rs b/examples/stm32l0/src/bin/flash.rs
index 4182c87b1..57ccf7f57 100644
--- a/examples/stm32l0/src/bin/flash.rs
+++ b/examples/stm32l0/src/bin/flash.rs
@@ -4,7 +4,7 @@
4 4
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::{flash::Flash, interrupt}; 7use embassy_stm32::flash::Flash;
8use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
9 9
10#[embassy_executor::main] 10#[embassy_executor::main]
@@ -14,7 +14,7 @@ async fn main(_spawner: Spawner) {
14 14
15 const ADDR: u32 = 0x26000; 15 const ADDR: u32 = 0x26000;
16 16
17 let mut f = Flash::new(p.FLASH, interrupt::take!(FLASH)).into_blocking_regions().bank1_region; 17 let mut f = Flash::new_blocking_only(p.FLASH).into_blocking_regions().bank1_region;
18 18
19 info!("Reading..."); 19 info!("Reading...");
20 let mut buf = [0u8; 8]; 20 let mut buf = [0u8; 8];
diff --git a/examples/stm32l1/src/bin/flash.rs b/examples/stm32l1/src/bin/flash.rs
index 53052e7c5..71174bfbc 100644
--- a/examples/stm32l1/src/bin/flash.rs
+++ b/examples/stm32l1/src/bin/flash.rs
@@ -4,7 +4,7 @@
4 4
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::{flash::Flash, interrupt}; 7use embassy_stm32::flash::Flash;
8use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
9 9
10#[embassy_executor::main] 10#[embassy_executor::main]
@@ -14,7 +14,7 @@ async fn main(_spawner: Spawner) {
14 14
15 const ADDR: u32 = 0x26000; 15 const ADDR: u32 = 0x26000;
16 16
17 let mut f = Flash::new(p.FLASH, interrupt::take!(FLASH)).into_blocking_regions().bank1_region; 17 let mut f = Flash::new_blocking_only(p.FLASH).into_blocking_regions().bank1_region;
18 18
19 info!("Reading..."); 19 info!("Reading...");
20 let mut buf = [0u8; 8]; 20 let mut buf = [0u8; 8];
diff --git a/examples/stm32wl/src/bin/flash.rs b/examples/stm32wl/src/bin/flash.rs
index e03b69b82..51bd0db4e 100644
--- a/examples/stm32wl/src/bin/flash.rs
+++ b/examples/stm32wl/src/bin/flash.rs
@@ -4,7 +4,7 @@
4 4
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::{flash::Flash, interrupt}; 7use embassy_stm32::flash::Flash;
8use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
9 9
10#[embassy_executor::main] 10#[embassy_executor::main]
@@ -14,7 +14,7 @@ async fn main(_spawner: Spawner) {
14 14
15 const ADDR: u32 = 0x36000; 15 const ADDR: u32 = 0x36000;
16 16
17 let mut f = Flash::new(p.FLASH, interrupt::take!(FLASH)).into_blocking_regions().bank1_region; 17 let mut f = Flash::new_blocking_only(p.FLASH).into_blocking_regions().bank1_region;
18 18
19 info!("Reading..."); 19 info!("Reading...");
20 let mut buf = [0u8; 8]; 20 let mut buf = [0u8; 8];