]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/arm/bsp/realview/timer-arm-mptimer-realview.cpp
update
[l4.git] / kernel / fiasco / src / kern / arm / bsp / realview / timer-arm-mptimer-realview.cpp
1 // --------------------------------------------------------------------------
2 IMPLEMENTATION[arm && mptimer]:
3
4 #include "platform.h"
5 #include "timer_sp804.h"
6
7 PRIVATE static Mword Timer::interval()
8 {
9   Timer_sp804 timer(Kmem::mmio_remap(Mem_layout::Timer0_phys_base));
10   Platform::system_control->modify<Mword>(Platform::System_control::Timer0_enable, 0, 0);
11
12   Mword frequency = 1000000;
13   Mword timer_start = ~0UL;
14   unsigned factor = 5;
15   Mword sp_c = timer_start - frequency / 1000 * (1 << factor);
16
17   timer.disable();
18   timer.counter_value(timer_start);
19   timer.reload_value(timer_start);
20   timer.enable(Timer_sp804::Ctrl_periodic);
21
22   Mword vc = start_as_counter();
23   while (sp_c < timer.counter())
24     ;
25   Mword interval = (vc - stop_counter()) >> factor;
26   timer.disable();
27   return interval;
28 }