#![no_main]
#![no_std]
extern crate panic_semihosting;
use cortex_m_rt::entry;
#[allow(unused_imports)]
use cortex_m_semihosting::{dbg, hprint, hprintln};
use hal::prelude::*;
use lpc55_hal as hal;
macro_rules! dump_hex {
($array:expr) => {
hprint!("{:?} = ", stringify!($array));
for i in 0..$array.len() {
hprint!("{:02X}", $array[i]);
}
hprintln!("");
};
}
#[entry]
fn main() -> ! {
let hal = hal::new();
let mut anactrl = hal.anactrl;
let mut pmc = hal.pmc;
let mut syscon = hal.syscon;
const DATA_ADDR: usize = 0x00080000;
let _clocks = hal::ClockRequirements::default()
.system_frequency(12.MHz())
.configure(&mut anactrl, &mut pmc, &mut syscon)
.unwrap();
let flash = hal.flash.enabled(&mut syscon);
let mut flash = hal::FlashGordon::new(flash);
let rng = hal.rng.enabled(&mut syscon);
let mut prince = hal.prince.enabled(&rng);
prince.enable_all_region_2();
hprintln!("writing AA's to flash data.");
flash.erase_page(DATA_ADDR / 512).unwrap();
flash.erase_page((DATA_ADDR / 512) + 1).unwrap();
prince.write_encrypted(|_prince| {
let vector = [0xAA; 1024];
flash.write(DATA_ADDR, &vector).unwrap();
});
hprintln!("Read bytes PRINCE ON:");
let mut buf = [0u8; 1024];
#[allow(clippy::needless_range_loop)]
for i in 0..buf.len() {
let ptr = DATA_ADDR as *const u8;
buf[i] = unsafe { *ptr.add(i) };
}
dump_hex!(&buf[0..32]);
prince.disable_all_region_2();
#[allow(clippy::needless_range_loop)]
for i in 0..buf.len() {
let ptr = DATA_ADDR as *const u8;
buf[i] = unsafe { *ptr.add(i) };
}
hprintln!("Read bytes PRINCE OFF:");
dump_hex!(&buf[0..32]);
hprintln!("done.");
loop {
continue;
}
}