Skip to content

Instantly share code, notes, and snippets.

@mygnu
Last active October 21, 2021 12:22
Show Gist options
  • Save mygnu/ed30b0fd8c22ccfb034dcf8512eca96d to your computer and use it in GitHub Desktop.
Save mygnu/ed30b0fd8c22ccfb034dcf8512eca96d to your computer and use it in GitHub Desktop.
CONFIGFRS
pub const B0: u32 = 1 << 0;
pub const B1: u32 = 1 << 1;
pub const B2: u32 = 1 << 2;
pub const B3: u32 = 1 << 3;
pub const B4: u32 = 1 << 4;
pub const B5: u32 = 1 << 5;
pub const B6: u32 = 1 << 6;
pub const B7: u32 = 1 << 7;
pub const B8: u32 = 1 << 8;
pub const B9: u32 = 1 << 9;
pub const B10: u32 = 1 << 10;
pub const B11: u32 = 1 << 11;
pub const B12: u32 = 1 << 12;
pub const B13: u32 = 1 << 13;
pub const B14: u32 = 1 << 14;
pub const B15: u32 = 1 << 15;
pub const B16: u32 = 1 << 16;
pub const B17: u32 = 1 << 17;
pub const B18: u32 = 1 << 18;
pub const B19: u32 = 1 << 19;
pub const B20: u32 = 1 << 20;
pub const B21: u32 = 1 << 21;
pub const B22: u32 = 1 << 22;
pub const B23: u32 = 1 << 23;
pub const B24: u32 = 1 << 24;
pub const B25: u32 = 1 << 25;
pub const B26: u32 = 1 << 26;
pub const B27: u32 = 1 << 27;
pub const B28: u32 = 1 << 28;
pub const B29: u32 = 1 << 29;
pub const B30: u32 = 1 << 30;
pub const B31: u32 = 1 << 31;
const fn reset(mut val: u32, rhs: u32) -> u32 {
val &= !rhs;
val
}
const fn set(mut val: u32, rhs: u32) -> u32 {
val |= rhs;
val
}
/// example usage
/// #[link_section = ".configsfrs"]
/// #[no_mangle]
/// pub static CONFIGSFRS: [u32; 4] = ConfigsfrsBuilder::default().set_code_protection().build();
pub struct ConfigsfrsBuilder {
r3: u32,
r2: u32,
r1: u32,
r0: u32,
}
impl ConfigsfrsBuilder {
pub const fn default() -> Self {
Self {
r3: 0x0fffffff, // DEVCFG3
r2: 0xfff9ffd9, // DEVCFG2
r1: 0xff7fcfd9, // DEVCFG1
r0: 0x7ffffffb, // DEVCFG0
}
}
pub const fn set_code_protection(mut self) -> Self {
self.r0 = reset(self.r0, B28);
self
}
pub const fn build(self) -> [u32; 4] {
[self.r3, self.r2, self.r1, self.r0]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment