1 // --------------------------------------------------------------------------
2 INTERFACE [arm && sp804]:
4 #include "timer_sp804.h"
9 static Static_object<Timer_sp804> sp804;
12 // --------------------------------------------------------------------------
13 INTERFACE [arm && sp804 && realview_vexpress_a15]:
18 static unsigned irq() { return 34; }
21 // --------------------------------------------------------------------------
22 INTERFACE [arm && sp804 && !realview_vexpress_a15]:
27 static unsigned irq() { return 36; }
30 // -----------------------------------------------------------------------
31 IMPLEMENTATION [arm && sp804]:
39 Static_object<Timer_sp804> Timer::sp804;
42 void Timer::init(Cpu_number)
44 sp804.construct(Kmem::mmio_remap(Mem_layout::Timer0_phys_base));
45 Platform::system_control->modify<Mword>(Platform::System_control::Timer0_enable, 0, 0);
49 //Io::write<Mword>(0, Timer_sp804::Ctrl_1);
50 //Io::write<Mword>(0, Timer_sp804::Ctrl_2);
51 //Io::write<Mword>(0, Timer_sp804::Ctrl_3);
53 sp804->reload_value(Timer_sp804::Interval);
54 sp804->counter_value(Timer_sp804::Interval);
55 sp804->enable(Timer_sp804::Ctrl_periodic | Timer_sp804::Ctrl_ie);
60 Timer::timer_to_us(Unsigned32 /*cr*/)
65 Timer::us_to_timer(Unsigned64 us)
66 { (void)us; return 0; }
77 Timer::update_one_shot(Unsigned64 wakeup)
82 IMPLEMENT inline NEEDS["config.h", "kip.h"]
86 if (Config::Scheduler_one_shot)
89 return Kip::k()->clock;