Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 23f0fa3b0b |
@@ -270,37 +270,11 @@ fn boot_app(app_sel: AppSel, cp: &cortex_m::Peripherals) -> ! {
|
|||||||
cortex_m::asm::isb();
|
cortex_m::asm::isb();
|
||||||
unsafe {
|
unsafe {
|
||||||
if app_sel == AppSel::A {
|
if app_sel == AppSel::A {
|
||||||
cp.SCB.vtor.write(APP_A_START_ADDR);
|
cortex_m::asm::bootload(APP_A_START_ADDR as *const u32);
|
||||||
} else {
|
} else {
|
||||||
cp.SCB.vtor.write(APP_B_START_ADDR);
|
cortex_m::asm::bootload(APP_B_START_ADDR as *const u32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cortex_m::asm::dsb();
|
|
||||||
cortex_m::asm::isb();
|
|
||||||
vector_reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn vector_reset() -> ! {
|
|
||||||
unsafe {
|
|
||||||
// Set R0 to VTOR address (0xE000ED08)
|
|
||||||
let vtor_address: u32 = 0xE000ED08;
|
|
||||||
|
|
||||||
// Load VTOR
|
|
||||||
let vtor: u32 = *(vtor_address as *const u32);
|
|
||||||
|
|
||||||
// Load initial MSP value
|
|
||||||
let initial_msp: u32 = *(vtor as *const u32);
|
|
||||||
|
|
||||||
// Set SP value (assume MSP is selected)
|
|
||||||
core::arch::asm!("mov sp, {0}", in(reg) initial_msp);
|
|
||||||
|
|
||||||
// Load reset vector
|
|
||||||
let reset_vector: u32 = *((vtor + 4) as *const u32);
|
|
||||||
|
|
||||||
// Branch to reset handler
|
|
||||||
core::arch::asm!("bx {0}", in(reg) reset_vector);
|
|
||||||
}
|
|
||||||
unreachable!();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup_edac(syscfg: &mut pac::Sysconfig) {
|
fn setup_edac(syscfg: &mut pac::Sysconfig) {
|
||||||
|
|||||||
Reference in New Issue
Block a user