use crate::phys::periodic_timers::*;
use crate::phys::*;
#[allow(non_camel_case_types)]
pub type uNano = u128;
pub const F_CPU: u32 = 396000000;
pub const CLOCK_CPU: u32 = 132000000;
pub fn clock_init() {
periodic_timers::pit_start_clock();
assign(addrs::CCM_CCGR1, read_word(addrs::CCM_CCGR1) | (0x3 << 12));
pit_configure(
&PeriodicTimerSource::Timer1,
PITConfig {
chained: true,
irq_en: false,
en: false,
},
);
pit_configure(
&PeriodicTimerSource::Timer0,
PITConfig {
chained: false,
irq_en: false,
en: false,
},
);
pit_load_value(&PeriodicTimerSource::Timer1, 0xFFFF_FFFF);
pit_load_value(&PeriodicTimerSource::Timer0, 0xFFFF_FFFF);
pit_restart(&PeriodicTimerSource::Timer1);
pit_restart(&PeriodicTimerSource::Timer0);
}
#[no_mangle]
pub fn nanos() -> uNano {
let uptime_ticks = pit_read_lifetime() as uNano;
return ((uptime_ticks * 14000) / 1848) as uNano;
}