HeavyX/firmware/testing/src/timer.rs

31 lines
915 B
Rust

use core::ptr::{read_volatile, write_volatile};
const TIMER_CONTROL: *mut u32 = (0x02000020) as *mut u32;
const TIMER_LOAD : *mut u32 = (0x02000024) as *mut u32;
const TIMER_RELOAD : *mut u32 = (0x02000028) as *mut u32;
const TIMER_CURRENT: *mut u32 = (0x0200002C) as *mut u32;
pub fn timer_enable() {
unsafe {
let bitmasked = read_volatile(TIMER_CONTROL) & (!0x11) as u32;
write_volatile(TIMER_CONTROL, (0x11 | bitmasked) as u32);
}
}
pub fn timer_disable() {
unsafe {
let bitmasked = read_volatile(TIMER_CONTROL) & (!0x11) as u32;
write_volatile(TIMER_CONTROL, (0x00 | bitmasked) as u32);
}
}
pub fn timer_set(load: u32, reload: u32) {
unsafe {
write_volatile(TIMER_LOAD, load as u32);
write_volatile(TIMER_RELOAD, reload as u32);
}
}
pub fn timer_get() -> u32 {
unsafe {
return read_volatile(TIMER_CURRENT) as u32
}
}