1 // --------------------------------------------------------------------------
2 IMPLEMENTATION[arm && mptimer]:
4 PRIVATE static Mword Timer::interval()
6 Mword v = Io::read<Mword>(Timer_sp804::System_control);
7 v |= Timer_sp804::Timclk << Timer_sp804::Timer0_enable;
8 Io::write<Mword>(v, Timer_sp804::System_control);
10 Mword frequency = 1000000;
11 Mword timer_start = ~0UL;
13 Mword sp_c = timer_start - frequency / 1000 * (1 << factor);
15 Io::write<Mword>(0, Timer_sp804::Ctrl_0);
16 Io::write<Mword>(timer_start, Timer_sp804::Value_0);
17 Io::write<Mword>(timer_start, Timer_sp804::Load_0);
18 Io::write<Mword>( Timer_sp804::Ctrl_enable
19 | Timer_sp804::Ctrl_periodic,
22 Mword vc = start_as_counter();
23 while (sp_c < Io::read<Mword>(Timer_sp804::Value_0))
25 Mword interval = (vc - stop_counter()) >> factor;
26 Io::write<Mword>(0, Timer_sp804::Ctrl_0);