diff options
| author | Rasmus Melchior Jacobsen <[email protected]> | 2023-05-25 13:42:42 +0200 |
|---|---|---|
| committer | Rasmus Melchior Jacobsen <[email protected]> | 2023-05-25 20:07:42 +0200 |
| commit | 7371eefa8666c304fce5c0e25f5315b1f10161fa (patch) | |
| tree | 5f497dd02f3c08e7a383c43eefeb9763f59705d5 | |
| parent | 15636f05f54458a184f0e117b1cfdb9d8e929f1d (diff) | |
Align with new bind_interrupt
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 | ||
| 13 | impl<'d> Flash<'d> { | 13 | impl<'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 @@ | |||
| 1 | use atomic_polyfill::{fence, Ordering}; | 1 | use atomic_polyfill::{fence, Ordering}; |
| 2 | use embassy_cortex_m::interrupt::InterruptExt; | 2 | use embassy_cortex_m::interrupt::{Interrupt, InterruptExt}; |
| 3 | use embassy_hal_common::drop::OnDrop; | 3 | use embassy_hal_common::drop::OnDrop; |
| 4 | use embassy_hal_common::{into_ref, PeripheralRef}; | 4 | use embassy_hal_common::{into_ref, PeripheralRef}; |
| 5 | use stm32_metapac::FLASH_BASE; | 5 | use stm32_metapac::FLASH_BASE; |
| @@ -9,21 +9,37 @@ use super::{ | |||
| 9 | WRITE_SIZE, | 9 | WRITE_SIZE, |
| 10 | }; | 10 | }; |
| 11 | use crate::peripherals::FLASH; | 11 | use crate::peripherals::FLASH; |
| 12 | use crate::Peripheral; | 12 | use crate::{interrupt, Peripheral}; |
| 13 | 13 | ||
| 14 | pub struct Flash<'d> { | 14 | pub 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 | ||
| 18 | impl<'d> Flash<'d> { | 19 | impl<'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 | ||
| 72 | pub struct InterruptHandler; | ||
| 73 | |||
| 74 | impl interrupt::Handler<crate::interrupt::FLASH> for InterruptHandler { | ||
| 75 | unsafe fn on_interrupt() { | ||
| 76 | family::on_interrupt(); | ||
| 77 | } | ||
| 78 | } | ||
| 79 | |||
| 55 | pub(super) fn read_blocking(base: u32, size: u32, offset: u32, bytes: &mut [u8]) -> Result<(), Error> { | 80 | pub(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 | ||
| 16 | pub(crate) unsafe fn on_interrupt(_: *mut ()) { | 16 | pub(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 | ||
| 16 | pub(crate) unsafe fn on_interrupt(_: *mut ()) { | 16 | pub(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 | ||
| 213 | pub(crate) unsafe fn on_interrupt(_: *mut ()) { | 213 | pub(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 | ||
| 15 | pub(crate) unsafe fn on_interrupt(_: *mut ()) { | 15 | pub(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 | ||
| 20 | pub(crate) unsafe fn on_interrupt(_: *mut ()) { | 20 | pub(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 | ||
| 15 | pub(crate) unsafe fn on_interrupt(_: *mut ()) { | 15 | pub(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 | ||
| 11 | pub(crate) unsafe fn on_interrupt(_: *mut ()) { | 11 | pub(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] |
| 18 | async fn main(_spawner: Spawner) { | 18 | async 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] |
| 17 | async fn main(_spawner: Spawner) { | 17 | async 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] |
| 17 | async fn main(_spawner: Spawner) { | 17 | async 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] |
| 19 | async fn main(_spawner: Spawner) { | 19 | async 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] |
| 19 | async fn main(_spawner: Spawner) { | 19 | async 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] |
| 18 | async fn main(_spawner: Spawner) { | 18 | async 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] |
| 18 | async fn main(_spawner: Spawner) { | 18 | async 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 | ||
| 5 | use defmt::{info, unwrap}; | 5 | use defmt::{info, unwrap}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::{flash::Flash, interrupt}; | 7 | use embassy_stm32::flash::Flash; |
| 8 | use {defmt_rtt as _, panic_probe as _}; | 8 | use {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 | ||
| 5 | use defmt::{info, unwrap}; | 5 | use defmt::{info, unwrap}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::{flash::Flash, interrupt}; | 7 | use embassy_stm32::flash::Flash; |
| 8 | use {defmt_rtt as _, panic_probe as _}; | 8 | use {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 @@ | |||
| 5 | use defmt::{info, unwrap}; | 5 | use defmt::{info, unwrap}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_time::{Timer, Duration}; | 7 | use embassy_time::{Timer, Duration}; |
| 8 | use embassy_stm32::flash::Flash; | 8 | use embassy_stm32::flash::{Flash, InterruptHandler}; |
| 9 | use embassy_stm32::gpio::{AnyPin, Level, Output, Pin, Speed}; | 9 | use embassy_stm32::gpio::{AnyPin, Level, Output, Pin, Speed}; |
| 10 | use embassy_stm32::{interrupt}; | 10 | use embassy_stm32::bind_interrupts; |
| 11 | use {defmt_rtt as _, panic_probe as _}; | 11 | use {defmt_rtt as _, panic_probe as _}; |
| 12 | 12 | ||
| 13 | bind_interrupts!(struct Irqs { | ||
| 14 | FLASH => InterruptHandler; | ||
| 15 | }); | ||
| 16 | |||
| 13 | #[embassy_executor::main] | 17 | #[embassy_executor::main] |
| 14 | async fn main(spawner: Spawner) { | 18 | async 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 | ||
| 5 | use defmt::{info, unwrap}; | 5 | use defmt::{info, unwrap}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::{flash::Flash, interrupt}; | 7 | use embassy_stm32::flash::Flash; |
| 8 | use embassy_time::{Duration, Timer}; | 8 | use embassy_time::{Duration, Timer}; |
| 9 | use {defmt_rtt as _, panic_probe as _}; | 9 | use {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 | ||
| 5 | use defmt::{info, unwrap}; | 5 | use defmt::{info, unwrap}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::{flash::Flash, interrupt}; | 7 | use embassy_stm32::flash::Flash; |
| 8 | use {defmt_rtt as _, panic_probe as _}; | 8 | use {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 | ||
| 5 | use defmt::{info, unwrap}; | 5 | use defmt::{info, unwrap}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::{flash::Flash, interrupt}; | 7 | use embassy_stm32::flash::Flash; |
| 8 | use {defmt_rtt as _, panic_probe as _}; | 8 | use {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 | ||
| 5 | use defmt::{info, unwrap}; | 5 | use defmt::{info, unwrap}; |
| 6 | use embassy_executor::Spawner; | 6 | use embassy_executor::Spawner; |
| 7 | use embassy_stm32::{flash::Flash, interrupt}; | 7 | use embassy_stm32::flash::Flash; |
| 8 | use {defmt_rtt as _, panic_probe as _}; | 8 | use {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]; |
