Skip to content

Commit 30eea8f

Browse files
Abestanisrichardeoin
authored andcommitted
Add access_banks flash accessor
1 parent 6c76647 commit 30eea8f

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

src/flash/mod.rs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,13 @@ pub trait FlashExt {
123123
fn address(&self) -> usize;
124124
/// Size in bytes
125125
fn len(&self) -> usize;
126-
/// Access to memory banks
126+
/// Split the flash into its banks.
127127
fn split(self) -> (LockedFlashBank, Option<LockedFlashBank>);
128+
/// Access to memory banks.
129+
fn access_banks<T>(
130+
&mut self,
131+
f: impl FnOnce(&mut LockedFlashBank, Option<&mut LockedFlashBank>) -> T,
132+
) -> T;
128133
///
129134
fn access_bank1<F, T>(&mut self, f: F) -> T
130135
where
@@ -148,6 +153,23 @@ impl FlashExt for FLASH {
148153
};
149154
f(&mut bank)
150155
}
156+
fn access_banks<T>(
157+
&mut self,
158+
f: impl FnOnce(&mut LockedFlashBank, Option<&mut LockedFlashBank>) -> T,
159+
) -> T {
160+
let len = self.len();
161+
let mut bank1 = LockedFlashBank {
162+
bank_index: 1,
163+
base: 0x0800_0000,
164+
len: if self.dual_bank() { len / 2 } else { len },
165+
};
166+
let mut bank2 = self.dual_bank().then_some(LockedFlashBank {
167+
bank_index: 2,
168+
base: 0x0810_0000,
169+
len: self.len() / 2,
170+
});
171+
f(&mut bank1, bank2.as_mut())
172+
}
151173
fn address(&self) -> usize {
152174
0x0800_0000
153175
}

0 commit comments

Comments
 (0)