1 // --------------------------------------------------------------------------
2 INTERFACE [arm && mptimer]:
10 static unsigned irq() { return 29; }
15 Timer_load_reg = Kmem::Mp_scu_map_base + 0x600 + 0x0,
16 Timer_counter_reg = Kmem::Mp_scu_map_base + 0x600 + 0x4,
17 Timer_control_reg = Kmem::Mp_scu_map_base + 0x600 + 0x8,
18 Timer_int_stat_reg = Kmem::Mp_scu_map_base + 0x600 + 0xc,
22 Timer_control_enable = 1 << 0,
23 Timer_control_reload = 1 << 1,
24 Timer_control_itenable = 1 << 2,
25 Timer_control_prescaler = (Prescaler & 0xff) << 8,
27 Timer_int_stat_event = 1,
31 // --------------------------------------------------------------
32 IMPLEMENTATION [arm && mptimer]:
44 Timer::start_as_counter()
46 Io::write<Mword>(Timer_control_prescaler | Timer_control_reload
47 | Timer_control_enable,
51 Io::write<Mword>(v, Timer_counter_reg);
59 Mword v = Io::read<Mword>(Timer_counter_reg);
60 Io::write<Mword>(0, Timer_control_reg);
70 Io::write<Mword>(i, Timer_load_reg);
71 Io::write<Mword>(i, Timer_counter_reg);
72 Io::write<Mword>(Timer_control_prescaler | Timer_control_reload
73 | Timer_control_enable | Timer_control_itenable,
79 Timer::timer_to_us(Unsigned32 /*cr*/)
84 Timer::us_to_timer(Unsigned64 us)
85 { (void)us; return 0; }
87 PUBLIC static inline NEEDS["io.h"]
91 Io::write<Mword>(Timer_int_stat_event, Timer_int_stat_reg);
96 Timer::update_one_shot(Unsigned64 wakeup)
101 IMPLEMENT inline NEEDS["config.h", "kip.h"]
103 Timer::system_clock()
105 if (Config::Scheduler_one_shot)
107 return Kip::k()->clock;