1 // --------------------------------------------------------------------------
2 INTERFACE [arm && kirkwood]:
9 static unsigned irq() { return 1; }
13 Control_Reg = Mem_layout::Reset_map_base + 0x20300,
14 Reload0_Reg = Mem_layout::Reset_map_base + 0x20310,
15 Timer0_Reg = Mem_layout::Reset_map_base + 0x20314,
16 Reload1_Reg = Mem_layout::Reset_map_base + 0x20318,
17 Timer1_Reg = Mem_layout::Reset_map_base + 0x2031c,
19 Bridge_cause = Mem_layout::Reset_map_base + 0x20110,
20 Bridge_mask = Mem_layout::Reset_map_base + 0x20114,
22 Timer0_enable = 1 << 0,
25 Timer0_bridge_num = 1 << 1,
26 Timer1_bridge_num = 1 << 2,
28 Reload_value = 200000,
32 // ----------------------------------------------------------------------
33 IMPLEMENTATION [arm && kirkwood]:
40 void Timer::init(unsigned)
43 Io::write(0, Control_Reg);
45 // Set current timer value and reload value
46 Io::write<Mword>(Reload_value, Timer0_Reg);
47 Io::write<Mword>(Reload_value, Reload0_Reg);
49 Io::set<Mword>(Timer0_enable | Timer0_auto, Control_Reg);
51 Io::set<Unsigned32>(Timer0_bridge_num, Bridge_mask);
56 Timer::timer_to_us(Unsigned32 /*cr*/)
61 Timer::us_to_timer(Unsigned64 us)
62 { (void)us; return 0; }
64 PUBLIC static inline NEEDS["io.h"]
68 Io::clear<Unsigned32>(Timer0_bridge_num, Bridge_cause);
73 Timer::update_one_shot(Unsigned64 /*wakeup*/)
77 IMPLEMENT inline NEEDS["config.h", "kip.h"]
81 if (Config::Scheduler_one_shot)
83 return Kip::k()->clock;