diff options
Diffstat (limited to 'crates/qemu/src/lib.rs')
| -rw-r--r-- | crates/qemu/src/lib.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/crates/qemu/src/lib.rs b/crates/qemu/src/lib.rs new file mode 100644 index 0000000..dc91465 --- /dev/null +++ b/crates/qemu/src/lib.rs @@ -0,0 +1,37 @@ +#![no_std] + +use cortex_m_rt as _; +use lm3s6965 as _; + +use rust_threadx_cortex_m as _; +use rust_threadx_stdio_semihosting as _; + +pub fn exit_success() -> ! { + use cortex_m_semihosting::debug::*; + exit(EXIT_SUCCESS); + unreachable!() +} + +// Designed for ARMv6-M. Just enough to get the example +// running in QEMU with a meaningless system tick. +#[unsafe(no_mangle)] +pub extern "C" fn _tx_initialize_low_level() { + use cortex_m::{Peripherals, peripheral::scb::SystemHandler}; + + cortex_m::interrupt::disable(); + + let Peripherals { + mut SYST, mut SCB, .. + } = Peripherals::take().unwrap(); + + SYST.set_reload(80000 - 1); + SYST.clear_current(); + SYST.enable_interrupt(); + SYST.enable_counter(); + + unsafe { + SCB.set_priority(SystemHandler::SysTick, 0x40); + SCB.set_priority(SystemHandler::PendSV, 0xff); + SCB.set_priority(SystemHandler::SVCall, 0xff); + } +} |
